ijkplayer支持rtsp實時性

ijkplayer對rtsp的支持是很弱的,所以需要修改一些代碼;


  1. Config
    首先要開啟rtsp的一些config選項,不知道最新的版本是否已經(jīng)添加,不過我用的是0.7.2還沒加上。
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=sdp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtp"
  1. Code
    很多人一拿到編好的庫,發(fā)現(xiàn)播不了,其實是因為下面這句代碼
    因為av_read_frame讀到了數(shù)據(jù),到這里又不處理,導(dǎo)致緩沖區(qū)一直不滿,
    所以rtsp不要設(shè)置緩沖區(qū);
#if CONFIG_RTSP_DEMUXER || CONFIG_MMSH_PROTOCOL
        if (is->paused &&
                (!strcmp(ic->iformat->name, "rtsp") ||
                 (ic->pb && !strncmp(ffp->input_filename, "mmsh:", 5)))) {
            /* wait 10 ms to avoid trying to get another packet */
            /* XXX: horrible */
            SDL_Delay(10);
            continue;
        }
#endif

把這段代碼注釋了吧!

另外,不設(shè)置緩沖區(qū),在應(yīng)用層添加(以android為例):

// 最大緩沖cache是3s, 有時候網(wǎng)絡(luò)波動,會突然在短時間內(nèi)收到好幾秒的數(shù)據(jù)
// 因此需要播放器丟包,才不會累積延時
// 這個和第三個參數(shù)packet-buffering無關(guān)。
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max_cached_duration", 3000); 

// 無限制收流
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "infbuf", 1); 

// 設(shè)置無緩沖,這是播放器的緩沖區(qū),有數(shù)據(jù)就播放
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0); 

// 可選,有時候tcp模式出畫面更快,因為rtsp是先udp,不成功再切到tcp的
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");

// 設(shè)置在解析的 url 之前 (這里設(shè)置超時為5秒)
// 如果沒有設(shè)置stimeout,在解析時(也就是avformat_open_input)把網(wǎng)線拔掉,av_read_frame會阻塞(時間單位是微妙)
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "stimeout", "5000000");

3.講的差不多了,代碼面前,了無秘密,
需要rtsp的優(yōu)化后代碼,請私信我QQ:307509256。

  1. 前兩天聽群里人說,抓包看ijk播放rtsp不會發(fā)TEARDOWN,斷開時通過tcp read的timeout,大概也就30s左右吧,如果是這樣,那確實是ijk對rtsp支持的一個bug,vlc抓包是有發(fā)的,我沒去查原因,知情者可以討論下;

后記:
如果代碼有bug或好的建議,請不吝賜教;
如果覺得有用,并加顆星;

Ai時代,寫作是一種新競爭力,自勉之~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容