ijkplayer和ffplay在打开rtmp串流视频时,大多数都会遇到5~10秒的延迟,在ffplay播放时,如果加上-fflags nobuffer可以缩短播放的rtmp视频延迟在1s内,而在IjkMediaPlayer中加入

mediaPlayer.setOption(1, "analyzemaxduration", 100L);
mediaPlayer.setOption(1, "probesize", 10240L);
mediaPlayer.setOption(1, "flush_packets", 1L);
mediaPlayer.setOption(4, "packet-buffering", 0L);
mediaPlayer.setOption(4, "framedrop", 1L);

1: 设置是否开启变调

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"soundtouch",isModifyTone?0:1);

2:设置是否开启环路过滤: 0开启,画面质量高,解码开销大,48关闭,画面质量差点,解码开销小

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC,"skip_loop_filter",isSkipLoopFilter?0:48L);

3:设置播放前的最大探测时间

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"analyzemaxduration",100L);

4:设置播放前的探测时间 1,达到首屏秒开效果

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"analyzeduration",1);

5:播放前的探测Size,默认是1M, 改小一点会出画面更快

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"probesize",1024*10);

6:每处理一个packet之后刷新io上下文

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"flush_packets",1L);

7: 是否开启预缓冲,一般直播项目会开启,达到秒开的效果,不过带来了播放丢帧卡顿的体验

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"packet-buffering",isBufferCache?1:0);

8:播放重连次数

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"reconnect",5);

9:最大缓冲大小,单位kb

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"max-buffer-size",maxCacheSize);

10:跳帧处理,放CPU处理较慢时,进行跳帧处理,保证播放流程,画面和声音同步

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"framedrop",5);

11:最大fps

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"max-fps",30);

12:设置硬解码方式

jkPlayer支持硬解码和软解码。 软解码时不会旋转视频角度这时需要你通过onInfo的what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去获取角度,自己旋转画面。或者开启硬解硬解码,不过硬解码容易造成黑屏无声(硬件兼容问题),下面是设置硬解码相关的代码

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-handle-resolution-change", 1);

13.SeekTo设置优化

某些视频在SeekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题,通俗一点就是FFMPEG不兼容,视频压缩过于厉害,seek只支持关键帧,出现这个情况就是原始的视频文件中i 帧比较少

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);

14. 解决m3u8文件拖动问题 比如:一个3个多少小时的音频文件,开始播放几秒中,然后拖动到2小时左右的时间,要loading 10分钟

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "fastseek");//设置seekTo能够快速seek到指定位置并播放

重要记录,问题列表

1. 设置之后,高码率m3u8的播放卡顿,声音画面不同步,或者只有画面,没有声音,或者声音画面不同步

//某些视频在SeekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题,通俗一点就是FFMPEG不兼容,视频压缩过于厉害,seek只支持关键帧,出现这个情况就是原始的视频文件中i 帧比较少
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
//播放前的探测Size,默认是1M, 改小一点会出画面更快
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 1024 * 10);

借鉴Android的方法就可以了

flutter FijkPlayer seekTo的不准确问题相关推荐

  1. Android 解决MediaPlayer seekTo定位不准确(无需修改关键帧)

    提出问题     最近遇到问题,在使用seekTo方法为视频定位时,进度条拖动到某位置,松开后,实际定位偶发不准确. 探究过程 通过网上搜索,了解到:seekTo的逻辑是当指定位置不是关键帧时,会定位 ...

  2. 在Flutter中嵌入Native组件的正确姿势

    引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择.本文希望向大家介绍AndroidView的使用方式 ...

  3. android seekto实现_MediaExtractor的seekTo方法精确定位到指定帧

    MediaExtractor有一个方法如下   http://developer.android.com/intl/es/reference/android/media/MediaExtractor. ...

  4. flutter基于fijkplayer封装播放器皮肤

    由于flutter-fijkplayer播放器皮肤实在不能符合市场上的需求只能由自己重新根据官方源码来修改成自己需要的皮肤,但过程需要阅读源码和理解里面的api是干嘛的导致起码都得花个一两小时去处理, ...

  5. 揭秘!如何用Flutter设计一个100%准确的埋点框架?

    阿里妹导读:用户行为埋点是用来记录用户在操作时的一系列行为,也是业务做判断的核心数据依据,如果缺失或者不准确将会给业务带来不可恢复的损失.闲鱼将业务代码从Native迁移到Flutter上过程中,发现 ...

  6. flutter 视频解码器fijkplayer使用

    本人做视频监控项目的时候,需要去展示视频流到用户端,一开始使用flutter自带的VideoPlayer播放监控视频,一开始没有发现有什么问题,因为使用多的是Android模拟器,一直没有使用iso模 ...

  7. android seekto实现_Android IjkPlayer seekto后会有时会向后跳跃?不准确怎么解决

    我已经解决了,包括播放网络视频,而且运行的很好!!我发现一个规律,只要多次seekto 之后,肯定能准确跳转.所以我写了一个重复seekto 的机制: 首先初始化加入配置项: //SeekTo设置优化 ...

  8. Android MediaPlayer seekTo不准确问题

    在项目实践中,遇到播放视频时,手动拖拽滚动条到某个位置 比如1分钟,发现播放位置从58秒开始,这就是seekTo不准确问题 通过查找网上资料获知,视频都是有关键帧的问题,seekTo底层实现是指定的位 ...

  9. MediaPlayer SeekTo 不准确的解决方案

    MediaPlayer SeekTo 不准确的解决方案 参考文章: (1)MediaPlayer SeekTo 不准确的解决方案 (2)https://www.cnblogs.com/jms-blog ...

最新文章

  1. centos服务器之间相互挂载(samba)
  2. yum安装出现Error: Package: glibc-headers-2.17-157.el7.x86_64 (centos7.3)类似报错解决方案
  3. Ajax传递路径问题及解决
  4. kindeditor java 上传图片_java中KindEditor本地图片上传与上传失败问题
  5. 解决报错:错误1130- Host xxx is not allowed to connect to this MariaDb server
  6. sequence mysql jpa_Java-JPA-生成器-@SequenceGen
  7. 网站重启服务器有啥好处,常规服务器重启的好处和障碍
  8. Unity网格合并_材质合并
  9. Fiddler中response乱码的解决方案
  10. 简单实用的 TensorFlow 实现 RNN 入门教程
  11. 【kafka】kafka topic某些分区 副本落后leader太多
  12. 我可以做些什么来提高应用程序的可用性?
  13. Windows2003系统无法运行CS游戏的解决方案
  14. 【免费毕设】基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+lunwen)
  15. 朗沃20140424
  16. 如何引用Icommand并实现接口
  17. 计算机课程联合考试是什么意思,计算机技术在职研究生能否通过一月联考的方式学习课程内容...
  18. svn怎么删除已提交的文件
  19. 小米兰亭pro ttf_小米10Pro使用体验(三)
  20. PAT (Basic Level) 1045 柳婼、旭神两大思路分析【测试点】样例

热门文章

  1. QQ盗号软件后门分析与反击
  2. android聚合社交通讯录app,这5款APP让你抛弃手机自带通讯录
  3. 后台接口数量及粒度的一些思考总结
  4. IOS开发学习之路--第一篇--TOM猫
  5. 《高效程序员的45 个习惯》读书笔记
  6. access百科 pc_mdb是什么文件类型(win10电脑如何打开mdb文件)
  7. 2017.6.12“找回本心 坚持学习”
  8. 莫尔斯码(Morse Code)
  9. 嵌入式系统导论(彭蔓蔓等·人民邮电出版社)课后习题答案
  10. 那些年啊,那些事——一个程序员的奋斗史 ——14