6.5 IJKplayer框架介绍

IJKplayer 是一个基于 FFmpeg 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API易于集成;编译配置可裁剪,支持硬件加速解码,更加省电,目前比较火的美拍和斗鱼APP都在使用这个框架。

IJKplayer的编译运行

  • 1.下载ijkplayer

    https://github.com/Bilibili/ijkplayer

  • 2.在解压好的ijkplayer中,找到IJKMediaDemo。打开IJKMediaDemo,编译 会提示'libavformat/avformat.h' file not found的错误,这是因为libavformat是ffmpeg中的库,而ijkplayer是基于ffmpeg这个库的,因此需要导入ffmpeg。

  • 3.使用终端,cd 到ijkplayer-master目录中,输入./init-ios.sh运行脚本文件,init-ios.sh脚本的作用:下载ffmpeg源码,如果在前期准备中已经编译了ffmpeg,可以直接到ffmpeg中导入需要的文件。

  • 4.执行完脚本后,就会发现ijkplayer中有ffmpeg了,但是这仅仅是把ffmpeg下载下来了,并没有编译,我们还要继续编译。

编译时需要在终端输入如下命令:

cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

./compile-ffmpeg.sh clean 是删除一些文件和文件夹,为编译ffmpeg.sh做准备。 ./compile-ffmpeg.sh all 是真正的编译各个平台的ffmpeg库,并生成所以平台的通用库. 这是我们的ffmpeg已经彻底编译成功,如图6-5所示:

图6-5

  • 5.可以运行demo了。

IJKplayer的集成

集成 ijkplayer 有两种方法:一种方法是按照IJKMediaDemo工程中那样, 直接导入工程IJKMediaPlayer.xcodeproj, 这种方法比较初级,也不方便携带,我们在这里不多做介绍了。第二种方法是把ijkplayer打包成framework导入工程中使用.这种方法比较利于后期移植,方便使用。下面我们就介绍如何把ijkplayer打成framework包。

  • 1.首先打开工程IJKMediaPlayer.xcodeproj
  • 2.点击Edit Scheme,设置scheme,改成Release,如图6-6所示:

图6-6

  • 3.设置好scheme后分别用真机和模拟器进行编译。
  • 4.编译完成后右键点击IJKMediaFramework.framework进入Finder,进入Finder后可以看到真机和模拟器连个版本编译的结果,如图6-7所示:

图6-7

  • 5.合并两个版本的framework,打开终端,进行合并,输入命令行,命令行格式如下:
lipo -create "真机版本framework路径" "模拟器版本framework路径" -output "合并后的文件路径"

注意:我们合并的framework是/Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework和/Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework这两个文件

  • 6.合并成功后,需要用合并完的IJKMediaFramework替换掉原来其中一个版本的IJKMediaFramework生成新的Framework,如图6-8所示:

图6-8

  • 7.至此,替换过新的framework后的IJKMediaFramework.framework文件就是我们需要的框架了, 可以复制出来, 导入我们的工程使用.我们在本书中也会提供制作好的IJKMediaFramework.framework。

  • 8.工程中除了要导入新的IJKMediaFramework.framework,还要导入别的依赖库:libz.tbd libbz2.tbd libstdc++.tbd AudioToolbox.framework AVFoundation.framework CoreGraphics.framework CoreMedia.framework MediaPlayer.framework MobileCoreServices.framework OpenGLES.framework QuartzCore.framework UIKit.framework VideoToolbox.framework

IJKplayer的简单使用

    IJKFFOptions *options = [IJKFFOptions optionsByDefault];
    [options setPlayerOptionIntValue:1  forKey:@"videotoolbox"];
    // 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
    [options setPlayerOptionIntValue:29.97 forKey:@"r"];
    // -vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推
    [options setPlayerOptionIntValue:512 forKey:@"vol"];
    IJKFFMoviePlayerController *moviePlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:flv withOptions:options];
    moviePlayer.view.frame = self.contentView.bounds;
    // 填充fill
    moviePlayer.scalingMode = IJKMPMovieScalingModeAspectFill;
    // 设置自动播放(必须设置为NO, 防止自动播放, 才能更好的控制直播的状态)
    moviePlayer.shouldAutoplay = NO;
    // 默认不显示
    moviePlayer.shouldShowHudView = NO;
    [self.contentView insertSubview:moviePlayer.view atIndex:0];
    [moviePlayer prepareToPlay];
    self.moviePlayer = moviePlayer;

results matching ""

    No results matching ""