bilibili / ijkplayer

Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.
GNU General Public License v2.0
32.43k stars 8.11k forks source link

现在用ijkplayer播放RTSP直播流有3s延迟 #2442

Open Harryuan opened 7 years ago

Harryuan commented 7 years ago

用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);

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

Harryuan commented 7 years ago

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

Harryuan commented 7 years ago

下面的配置能否修改优化? 但我试着把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)

307509256 commented 7 years ago

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

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

Harryuan commented 7 years ago

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

zhanggao commented 7 years ago

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

Harryuan commented 7 years ago

是的 @zhanggao

fangzhouguang commented 7 years ago

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

sanchibing commented 7 years ago

2259

wumingXL commented 7 years ago

@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" 重新编译的,然后不能播放,请问还需要什么做什么工作

Pingyong commented 5 years ago

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

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

fallbort commented 3 years ago

试试使用 https://github.com/fallbort/ijkplayer 中的bilibli_player分支,做了缓慢累积追帧效果 具体使用参数,看git上的wiki

alidili commented 1 month ago

试试使用 https://github.com/fallbort/ijkplayer 中的bilibli_player分支,做了缓慢累积追帧效果 具体使用参数,看git上的wiki

用这个编译的包,在网络不好的情况下,进度明显跟上了,还不错

alidili commented 1 month ago

可以试试这个 https://github.com/alidili/ijkplayer