HarmonyOS鸿蒙Next中使用ijkplayer三方库播放rtsp视频流时怎样配置option参数,实现1秒内的延迟,且播放一段时间(比如20分钟)后,延迟不会累积

HarmonyOS鸿蒙Next中使用ijkplayer三方库播放rtsp视频流时怎样配置option参数,实现1秒内的延迟,且播放一段时间(比如20分钟)后,延迟不会累积 使用ijkplayer三方库播放rtsp视频流时怎样配置option参数,实现1秒内的延迟,且播放一段时间(比如20分钟)后,延迟不会累积??(延时还是在1秒内)

===================================

华为mate60开发手机,5.0系统,下载ohos_ijkplayer2.0.7,开发工具DevEco Studio5.0


更多关于HarmonyOS鸿蒙Next中使用ijkplayer三方库播放rtsp视频流时怎样配置option参数,实现1秒内的延迟,且播放一段时间(比如20分钟)后,延迟不会累积的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

开发者你好,ijkplayer播放rtsp视频流时,设置播放前预设参数,可以降低延迟,参考以下代码:

IjkMediaPlayer ijkMediaPlayer = null;
ijkMediaPlayer = new IjkMediaPlayer();
// 设置超时
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp"); 
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"fflags","nobuffer");
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", "2000000");
// 无限制收流
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"infbuf","1");            
// 设置无缓冲,这是播放器的缓冲区,有数据就播放
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"packet-buffering","0");

更多关于HarmonyOS鸿蒙Next中使用ijkplayer三方库播放rtsp视频流时怎样配置option参数,实现1秒内的延迟,且播放一段时间(比如20分钟)后,延迟不会累积的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你的方案延迟稳定在2秒

开发者你好,你这边可以将analyzeduration设置为1000000微秒。

一开始播放延迟1-1.5s左右,但过20分钟,1秒会延迟累积到1.5秒左右

ijkplayer原库有1s内延迟方案吗;

优化播放器设置可以试下。

  • 缓冲区设置: 减少播放器的缓冲区大小,可以降低延迟。在ijkplayer中,可以通过设置缓冲区大小来实现:
ijkmp_set_option(player, "max-buffer-size", 1000); // 设置最大缓冲区为1秒
  • 解码器优化: 使用硬件解码器可以提高解码速度,减少延迟。在ijkplayer中,可以通过以下设置启用硬件解码:
ijkmp_set_option(player, "mediacodec", 1);
ijkmp_set_option(player, "mediacodec-auto-rotate", 1);
ijkmp_set_option(player, "mediacodec-handle-resolution-change", 1);
  • 网络超时设置: 减少网络请求的超时时间,可以快速响应网络变化,减少延迟:
ijkmp_set_option(player, "timeout", 5000); // 设置超时时间为5秒

在HarmonyOS Next中使用ijkplayer播放RTSP流实现低延迟且防累积,需配置以下option参数:

  1. 设置最大缓冲时长:max-buffer-duration=1000000(微秒级,约1秒)
  2. 启用实时模式:rtsp_transport=tcpfflags=nobuffer
  3. 配置解码参数:framedrop=1sync=ext
  4. 设置缓存控制:infbuf=1analyzeduration=100000

关键参数组合可防止延迟累积:

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-duration", 1000000);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp");
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);

在HarmonyOS Next上使用ijkplayer播放RTSP低延迟流,关键配置如下:

1. 基础低延迟配置:

// 创建IjkMediaPlayer实例后设置
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "infbuf", 1L); // 无限缓冲
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "nobuffer");
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp"); // 强制TCP
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "max_delay", 500000L); // 500ms
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1L); // 跳帧
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 0L); // 不限制FPS

2. 防累积延迟配置:

// 启用时钟同步和缓冲区控制
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "sync", "ext"); // 外部时钟同步
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0L); // 禁用包缓冲
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 1L);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1L);

3. RTSP特定优化:

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp");
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "stimeout", 5000000L); // 5秒超时

4. 解码器配置:

// 根据设备能力选择硬解/软解
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1L); // 启用硬解
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1L);

5. 缓冲区动态调整:

// 实时调整避免累积
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 2L);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max_cached_duration", 300L); // 300ms缓存

配置后需在实际网络环境中测试调整。Mate60的硬件解码能力较强,建议优先启用硬解。若出现花屏可尝试切回软解(mediacodec设为0)。关键是通过max_delayframedropsync参数协同控制延迟。

回到顶部