[bilibili/ijkplayer]现在用ijkplayer播放RTSP直播流有3s延迟

2024-08-20 285 views
7

用Android ijkplayer的,我配置如下 ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-handle-resolution-change", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);

帮忙看看怎么分析和优化,多谢!

回答

3

一开始打开就慢了,后面也一直慢。 如下这样关闭音频也没什么效果。 ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "audio_disable", 1); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "av_sync_type", 2);

6

下面的配置能否修改优化? 但我试着把DEFAULT_LAST_HIGH_WATER_MARK_IN_MS降到 (1 * 1000)也没明显效果。

define DEFAULT_FIRST_HIGH_WATER_MARK_IN_MS (100) define DEFAULT_NEXT_HIGH_WATER_MARK_IN_MS (1 * 1000) define DEFAULT_LAST_HIGH_WATER_MARK_IN_MS (5 * 1000)
8

你没理解底层实现机制,DEFAULT_LAST_HIGH_WATER_MARK_IN_MS这个只是缓冲区的上限阀值,你要保证实时,要丢帧处理。

参考我的简书blog的实现 http://www.jianshu.com/p/ecf51ee32589

9

参照#2259有改善了,谢谢307509256,后面看看。

3

@Harryuan 你是参照 fengbenpaao 回答的参数修改的吗?

5

是的 @zhanggao

4

@Harryuan 为什么你们都能播放rtsp,我只能播放rtmp,播放rtsp的时候提示 Protocol not found,求帮忙

2
2259
8

@Harryuan 请问你的rtsp是怎么配置的,我这读取rtsp sdp协议的直播源走流量但是没有任何画面,我修改了module-lite.sh文件 export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mjpeg" 重新编译的,然后不能播放,请问还需要什么做什么工作

2

你没理解底层实现机制,DEFAULT_LAST_HIGH_WATER_MARK_IN_MS这个只是缓冲区的上限阀值,你要保证实时,要丢帧处理。

参考我的简书blog的实现 http://www.jianshu.com/p/ecf51ee32589 能把您编译好的低延迟so库发出来吗?