ijkplayer 的集成

作者: 哎呀我Qu | 来源:发表于2016-10-28 17:00 被阅读149次
  • 最近在研究直播 app 的实现,然而系统的播放器,不能解码直播视频的格式,自然也不能用于直播。好在 B 站提供了一款名为 ijkplayer 的开源直播框架,它基于 ffmpeg , 支持 Andriod 和 iOS 。现在将 ijkplayer 集成到直播 app 的过程分享给大家。

一、下载

  • 前往 GitHub 搜索 ijkplayer ,传送门在此 https://github.com/Bilibili/ijkplayer
  • 下翻找到 Build iOS 一项,如下图


    Build iOS.png
  • 打开终端,为了便于操作,cd 到 Desktop
1.GitHub写的很明朗,所以只需要傻瓜式操作,git clone 一下
  git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

过程很快,因为这不是完整的 ijkplayer

2.进入到 ijkplayer-ios 文件下,并切换到 B latest k0.6.3 这一分支
  cd ijkplayer-ios
  git checkout -B latest k0.6.3
3.主要人物出场了,下载 ffmpeg
  ./init-ios.sh

虽然翻了墙,网速很快,但这一过程还是十分漫长,可以去看看美剧

4. ffmpeg 下载完毕,但此时 demo 依旧是无法运行的,还需编译一下,依次执行如下命令即可
  cd ios
  ./compile-ffmpeg.sh clean
  ./compile-ffmpeg.sh all

相比下载的过程,这里快很多,中间会显示几个 warning ,不必担心。这时可以打开 demo ,运行一下。但是我在 demo 中选的视频都播放不了,在网上找了个直播地址,输进去可以播放。

二、合并

  • GitHub 上介绍了一种导入方法,但是我在网上发现了另一个方法,更方便今后的使用,将我们需要的 framework 文件合并导出。
1.打开 IJKMediaPlayer 的工程文件,将 Edit Scheme 中 Info 默认的 Debug 更改为 Release
Edit Scheme.png

因为我们不需要对该 framework 进行修改调试,拿过来直接用即可,而项目上线是需要设置为 Release 模式的

2.选择真机模式,command + B 编译一下;再选择任意一个模拟器模式,编译一下。
编译后文件位置.png

选中 IJKMediaFramework.framework,Show in Finder,你会看到目录下多了Release-iphoneos 和 Release-iphonesimulator 两个文件。我们要合并的就是两个文件下的 IJKMediaFramework 文件。


要合并的文件.png
3.在终端中,输入命令进行合并
  lipo -create "真机的 IJKMediaFramework 路径" "模拟器路径" -output "合并后路径"

ps: 直接拖拽文件到终端内,它的路径就出来了。
⚠️ 合并后的文件路径,我们要给合并后文件命个名,否则终端会出现 error 信息。直接把下图的 Products 拖拽到终端,在路径后加上 /IJKMediaFramework 即可,下图右侧的 IJKMediaFramework 文件即为合并后的文件。


合并后文件.png
将下图左侧的 IJKMediaFramework 文件,拖拽到右侧,选择替换。替换完毕后,中间的 IJKMediaFramework.framework 即我们需要的文件,可以直放到桌面上,下一步使用了
替换.png

ps: 可以分别看一我们合并的两个文件,一个是66.5MB,一个是33.2MB,而我们合并后得到的文件是99.7MB,完美!(就是下面这个)

IJKMediaFramework.framework.png

三、集成

1.直接将我们上一步的到的 IJKMediaFramework.framework 拖入工程的 Frameworks 即可

⚠️ 一定要将 Copy items if needed 勾选上


注意勾选.png
2.导入其他相关依赖
其他相关依赖.png

⚠️ 不要漏添啊,一共13个

3.使用

在你要播放直播视频的 ViewController 中导入头文件
#import <IJKMediaFramework/IJKMediaFramework.h>

读下 demo,将你需要的方法直接复制过来,再传入你需要播放的数据源就 OK 啦(直播视频资源来自映客)

直播视频截图1.png 直播视频截图2.png

下面是观看直播的 ViewController.m 文件,只用了几个基本的方法
(仿写的映客直播,过几天写完会把 demo 贴出来)

#import "QPPlayerViewController.h"
#import <IJKMediaFramework/IJKMediaFramework.h>

@interface QPPlayerViewController ()

@property (atomic, retain) id<IJKMediaPlayback> player;

@property (nonatomic ,strong) UIImageView * blurImageView;

@property (nonatomic, strong) UIButton * closeBtn;

@end

@implementation QPPlayerViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self initPlayer];

    [self initUI];
}

- (void)initUI {}

- (void)initPlayer {
    
    IJKFFOptions * options = [IJKFFOptions optionsByDefault];
    
    IJKFFMoviePlayerController * player = [[IJKFFMoviePlayerController alloc] initWithContentURLString:self.live.streamAddr withOptions:options];
    self.player = player;
    self.player.view.frame = self.view.bounds;
    self.player.shouldAutoplay = YES;
    [self.view addSubview:self.player.view];
}

/** 以下为 demo 里的方法,具体代码就不粘贴了 **/
- (void)viewWillAppear:(BOOL)animated {}

- (void)viewWillDisappear:(BOOL)animated {}

- (void)loadStateDidChange:(NSNotification*)notification {}

- (void)moviePlayBackDidFinish:(NSNotification*)notification {} 

- (void)mediaIsPreparedToPlayDidChange:(NSNotification*)notification {}

- (void)moviePlayBackStateDidChange:(NSNotification*)notification {}
 
- (void)installMovieNotificationObservers {}
 
- (void)removeMovieNotificationObservers {}

@end 

git 仓库地址:
git@github.com:JackieQu/QP_inke.git

相关文章

网友评论

  • 程序员界的吴彦祖:大神我遇到个问题,直播我获取相机权限第一次会黑屏,然后 iOS10第一次还会闪退,这是什么情况
    哎呀我Qu:闪退我之前遇到过,后来解决了,加我QQ吧 969957700,详细说一下
  • 2175e882552c:我准备把 demo 下下来,有空看看,学习学习
    哎呀我Qu:有不对的地方,敬请指教
  • 郑2017:这个可以,666
    哎呀我Qu:一般一般,都是用的开源框架😁

本文标题:ijkplayer 的集成

本文链接:https://www.haomeiwen.com/subject/depruttx.html