iOS用ijkplayer播RTSP流
公司要做点播平台,故而研究了几个播放器:百度,Vitamio,ijkplayer。综合这三个播放器的特点,既能播rtsp流,又能实例化多个的,ijkplayer还是比较好使的,所以就选了这个。由于在实现过程中经历了很多曲折,所以和大家分享一下这个过程。在github上下载ijkplayer的demo,git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios。github网址:https://github.com/Bilibili/ijkplayer?utm_source=tuicool&utm_medium=referral。ijkplayer需要homebrew、git、yasm环境
附加我做的demo地址https://github.com/xy13663015647/yxy-player,里面有我编译好的静态库,由于静态库过大,我压缩了一下,用的时候记得解压,好用的话请给个star
1.在运行之前,需要部署环境
2.修改module-lite.sh文件
打开demo文件夹,找到config文件夹下的module-lite.sh文件,修改这一行
COMMON_FF_CFG_FLAGS =" $ COMMON_FF_CFG_FLAGS --disable - rtp protocol =“
修改为-->
COMMON_FF_CFG_FLAGS =" $ COMMON_FF_CFG_FLAGS --enable - rtp protocol =",
在这下面再加上这一行:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
3.执行命令行
4.修改ff_ffplay.c文件
将这段代码
static int packet_queue_get_or_buffering(FFPlayerffp, PacketQueue *q, AVPacket *pkt, int *serial, int *finished)
{
assert(finished);
while (1) {
int new_packet = packet_queue_get(q, pkt, 0, serial);
if (new_packet < 0)
return -1;
else if (new_packet == 0) {
if (q->is_buffer_indicator && !finished)
ffp_toggle_buffering(ffp, 1);
new_packet = packet_queue_get(q, pkt, 1, serial);
if (new_packet < 0)
return -1;
}
if (*finished == *serial) {
av_free_packet(pkt);
continue;
}
else
break;
}
return 1;
}
替换成
static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int finished)
{
while (1) {
int new_packet = packet_queue_get(q, pkt, 1, serial);
if (new_packet < 0)
{
new_packet = packet_queue_get(q, pkt, 0, serial);
if(new_packet < 0)
return -1;
}
else if (new_packet == 0) {
if (!finished)
ffp_toggle_buffering(ffp, 1);
new_packet = packet_queue_get(q, pkt, 1, serial);
if (new_packet < 0)
return -1;
}
if (finished == *serial) {
av_free_packet(pkt);
continue;
}
else
break;
}
return 1;
}
5.编译ffmpeg,
cd ijkplayer-ios
git checkout -B latest k0.5.1
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
编译时间比较久,请大家耐心等待,成功后就可以运行Demo了,编译成功后ios文件夹下面的目录是这样的
编译过程我的Xcode不知道怎么回事,老是报错,最后无奈之下就重装了Xcode,然后就没问题了,我这个菜鸟也不知道怎么回事,反正提示bin文件夹下面文件缺失,搞不懂
然后就是打包IJKMediaFramework.framework框架了,这个过程我是借鉴别人的,在这里我就不盗用了,具体大家请看http://www.jianshu.com/p/1f06b27b3ac0这里的打包的流程,然后将框架导入你的工程,再添加相应的框架,就可以播放rtsp流了
另外需要大家注意一下,如果项目使用cocapod的话,我这边出现的问题如下图
找了半天也没找到原因,然后大神指点了我一下,在工程里添加libz.tdb,从而运行成功