目的
因为项目中用到了IJKMediaFramework这个直播的框架。不小心发现无法播放RTPS的流地址,所以网上各种资料,各种尝试。
本文不会有很长的内容和步骤的介绍,具体步骤我给出参考的地址,也是一位简书的小伙伴写的,已经很详细了。这里我就提出如何把RTPS和HTTPS都支持,整合在一起。
关键步骤
1.支持HTTPS
在模块文件中加入此行代码。我的编译是在module-lite.sh这个文件。
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"
2.支持RTPS
1.修改模块文件
首先将模块文件(module-lite.sh)中的此行代码修改成可使用的状态。
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
接着在下面添加这行代码
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
2.修改ff_ffplay.c文件
我是直接下载的zip包,而不是走git的拉下来的代码。但是应该差别不大。我的路径是ijkplayer-ios/ijkplayer/ff_ffplay.c。将文件中的方法替换成下面的方法即可。
static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int *finished){
if (!ffp->packet_buffering)
return packet_queue_get(q, pkt, 1, serial);
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 (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_packet_unref(pkt);
continue;
}else
break;
}
return 1;
}
结尾
首先给出我参考的步骤链接,除了文中提出的支持RTPS部分加入,其它可按照此文步骤去操作。并且小伙伴不用担心不支持armv7会不会有什么不好的影响。我的项目已经顺利上线,只是不支持iPhone5s之前的机器也就是必须要64位的手机。
最后再唠叨一下,如果你有好的想法或者好的建议都可以给我留言,可能我回复的没那么及时,但是我看到了一定会给你回复的。我希望可以和你们一起进步。
网友评论