[图文]关于iOS如何制作Library

关于[有图有真相]ffmepg在iOS上应用 后续制作Library,之前跟大家提了一下,这个是非常有必要告知给大家的,其实我觉得博文只是一种方式,最重要的是有意义的互动,就是我哪里做的不好,需要改进什么,大家提出的每一点建议都能让我们共同进步,这个世界没有人拖后腿,也没有人愿意,就看大家是否愿意w-w,双赢;很多时候大家认为只有w-l,实际上cong长远上来说这是l-l。

GenerateFrameImage-Library http://download.csdn.net/detail/knockheart/5543791

直入主题

1.新建项目Framework&Library

  [图文]关于iOS如何制作Library_第1张图片

2.本文以GenerateFrameLibrary做示例

[图文]关于iOS如何制作Library_第2张图片

3.将引用的框架和外部类库导入

   图中报红的库删掉重新导入便可


4.新建你的接口

      GenerateFrameImage.h

//

//  GenerateFrameImage.h

//  GenerateFrameImage

//

//  Created by lifei on 13-6-6.

//  Copyright (c) 2013 tci. All rights reserved.

//


#import <Foundation/Foundation.h>

@class VideoFrameExtractor;


@interface GenerateFrameImage :NSObject

{

   NSString *filePath;

    VideoFrameExtractor *video;

}


/* Initialize with movie at moviePath. Output dimensions are set to source dimensions. */

-(id)initWithFileUrl:(NSString *)moviePath;

- (NSArray*) getImages:(int)frameNum startSec:(float)secStart endSec:(float) secEnd;

-(void) setOutputImgSize:(int)width imgHeight:(int) height;

-(double) duration;

@end



GenerateFrameImage.m

//
//  GenerateFrameImage.m
//  GenerateFrameImage
//
//  Created by lifei on 13-6-6.
//  Copyright (c) 2013年 tci. All rights reserved.
//

#import "GenerateFrameImage.h"
#import "VideoFrameExtractor.h"

@implementation GenerateFrameImage
-(id)initWithFileUrl:(NSString *)moviePath{
    
    self = [super init];
    
    if (self) {
        //here is what you want to do
        filePath = moviePath;
        video = [[VideoFrameExtractor alloc]initWithVideo:filePath];
        //dufault output image size
        video.outputWidth = 426;
        video.outputHeight = 320;
        // print some info about the video
        DLog(@"video duration: %f",video.duration);
        DLog(@"video size: %d x %d", video.sourceWidth, video.sourceHeight);
    }
    
    return self;
}
-(double) duration{
    return video.duration;
}

-(void) setOutputImgSize:(int)width imgHeight:(int) height{
    video.outputWidth = width;
    video.outputHeight = height;
}

- (NSArray*) getImages:(int)frameNum startSec:(float)startSec endSec:(float) endSec{
    
    //init ImagesArray
    NSMutableArray * imagesArray = [[NSMutableArray alloc]init];
    //init a image object
//    UIImage *image=[[UIImage alloc] init];
    
    if(frameNum ==0){
        DLog(@"The Num is Zero");
        return nil;
    }
    //is startSec bigger than endSec
    if(startSec > endSec){
        DLog(@"The startSec is bigger than endSec");
        return nil;
    }
    
    if (startSec > video.duration || endSec > video.duration) {
        DLog(@"The startSec or endSec is bigger than video's length");
        return nil;
    }
    
   
    
    //get the time interval
    double timer  = endSec - startSec;
    double startTime = startSec;
    //get the average plusTime
    double plusTime = timer/frameNum;
    DLog(@"The endSec time: %f s",timer);
    // seek to point seconds
    if(startSec <= video.duration && endSec <= video.duration){
        
        for( int i=0 ;i< frameNum;i++){
            NSLog(@"StartTime == %f",startTime);
            [video seekTime:startTime];
            [video stepFrame];
            //trans the image to data with type of .Png
            NSData *data=UIImagePNGRepresentation(video.currentImage);
            
            [imagesArray addObject:data];
            [data release];
            startTime+=plusTime;
        }
        return imagesArray;
    }else{
        
        NSLog(@"The time is biger than the video length");
        return nil;
    }
    
}
@end


5.分别在模拟器和iOS Device上运行
    这里需要注意,因为FFmpeg属于第三方类库,虚拟机和device生产的.a静态库文件是不一样的,因为CPU的问题,虚拟机i386,真机是armv7,iPhone5
是armv7s,FFmpeg并没有armv7s支持,但是armv7其实已经满足需要了。我在这里想要说的是,在模拟器和iOS Device上运行时有个比较麻烦的操作,就是需要切换
引用的类库。
    切换后,在运行之前,删除Build Setting 中的Library Search Paths,然后在运行
    运行完后Products目录下会生成.a文件
    如图

6.一目了然,一个时虚拟机的.a文件,一个是真机的.a文件,下来要做的就是将两个文件合并成一个文件,
没错既支持虚拟机又支持真机的。
运行命令行 lipo -create 1.a文件路径  2.a文件路径 -output 包含文件名的输出文件路径
[图文]关于iOS如何制作Library_第3张图片


7.生成完的.a文件和几个.h头文件你就是的类库主要组成了,只要在使用的时候将它们加入工程,并引用即可

这里说的比较简单,可参考:我的另一篇博文基于FFmpeg自定义Library,GenerateFrameImage的使用说明

你可能感兴趣的:(ios,library,发布,库)