目的
因?yàn)轫?xiàng)目中用到了IJKMediaFramework這個(gè)直播的框架。不小心發(fā)現(xiàn)無法播放RTPS的流地址,所以網(wǎng)上各種資料,各種嘗試。
本文不會(huì)有很長的內(nèi)容和步驟的介紹,具體步驟我給出參考的地址,也是一位簡書的小伙伴寫的,已經(jīng)很詳細(xì)了。這里我就提出如何把RTPS和HTTPS都支持,整合在一起。
關(guān)鍵步驟
1.支持HTTPS
在模塊文件中加入此行代碼。我的編譯是在module-lite.sh這個(gè)文件。
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"
2.支持RTPS
1.修改模塊文件
首先將模塊文件(module-lite.sh)中的此行代碼修改成可使用的狀態(tài)。
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的拉下來的代碼。但是應(yīng)該差別不大。我的路徑是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;
}
結(jié)尾
首先給出我參考的步驟鏈接,除了文中提出的支持RTPS部分加入,其它可按照此文步驟去操作。并且小伙伴不用擔(dān)心不支持armv7會(huì)不會(huì)有什么不好的影響。我的項(xiàng)目已經(jīng)順利上線,只是不支持iPhone5s之前的機(jī)器也就是必須要64位的手機(jī)。
最后再嘮叨一下,如果你有好的想法或者好的建議都可以給我留言,可能我回復(fù)的沒那么及時(shí),但是我看到了一定會(huì)給你回復(fù)的。我希望可以和你們一起進(jìn)步。