IjkPlayer播放器秒开优化以及常用Option设置

摘要:
https://www.jianshu.com/p/843c86a9e9adhttps://www.cnblogs.com/renhui/p/6420140.htmlijkplayer和ffplay在打开rtmp串流视频时,大多数都会遇到5~10秒的延迟,在ffplay播放时,如果加上-fflagsnobuffer可以缩短播放的rtmp视频延迟在1s内,而在IjkMediaPlayer中加入mediaPlayer.setOption;mediaPlayer.setOption;mediaPlayer.setOption;mediaPlayer.setOption;mediaPlayer.setOption;1:设置是否开启变调mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"soundtouch",isModifyTone?

https://blog.csdn.net/shareus/article/details/78585260

ijkplayer点播和直播视频 问题 解决及优化
https://blog.csdn.net/it666dhw/article/details/78857092
使用IjkMediaPlayer结合surfaceView播放视频,自己写的播放和暂停按钮(四)

ijkplayer的编译

gradle

现在可以直接使用gradle引入ijkplayer了。但是,如果需要对更多格式进行支持,还是需要自己编译一次。

allprojects {
repositories {
jcenter()
}
}
dependencies {
# required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.1.2'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.1.2'
# Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.1.2'
compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.1.2'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.1.2'
compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.1.2'
# ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.1.2'
}

---------------------
作者:李jianguo
来源:CSDN
原文:https://blog.csdn.net/zhangkaiyazky/article/details/79637820
版权声明:本文为博主原创文章,转载请附上博文链接!

https://www.jianshu.com/p/843c86a9e9ad

https://www.cnblogs.com/renhui/p/6420140.html

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

小礼物走一走,来简书关注我


作者:GexYY
链接:https://www.jianshu.com/p/843c86a9e9ad
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

免责声明:文章转载自《IjkPlayer播放器秒开优化以及常用Option设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vscode中git设置不显示未跟踪的文件Firefox浏览器设置字符编码格式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

chrome提示"安装unity web player"

网页浏览Unity3D制作的效果时,出现提示"安装unity web player"。解决办法如下: →在浏览器中输入:chrome://flags/#enable-npapi 在NPAPI中,点击"启用"。在Native Client中,点击"启用"。 →在浏览器中输入:chrome://restart →依然出现提示:unity failed to d...

ios storyboard全解析 (二)

Add Player 最终的设计看上去像下面这样:#接第一部分:原帖地址简书地址 如果你想了解storyboards,那么你来对地方了.在第一篇文章第一篇文章中,你已经学到了Interface Builder的基本用法来创建和连线多个控制器,以及使用在storyboard中可以通过直接创建自定义的tableViewCell.此次storyboard系列教...

在批处理文件中启动MediaPlayer播放制定文件

我们知道在运行可以使用wmplayer指令来启动一个MediaPlayer,如果需要让MediaPlayer播放制定的文件或是一个制定的流媒体发布点,我们可以使用如下的命令格式 wmplayer "mms://WIN-FW.MiGu.com/12530" wmplayer "C:\wmpub\wmroot\legacy_content_clip.wmv"...

Android中Ijkplayer最简单的使用

先添加依赖: compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.5'  MainActivity里面: 1 public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void...

Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(一)

翻译官方文档加上自己的一些理解。 参考:WorldStreamer官方文档。 目标:将我自己的WorldManager与WorldStreamer结合,让WorldStreamer支持开放世界建筑系统。   一、原理 创建虚拟grid,将大世界分成小块管理。设置一个“参照点”(通常是Player,如果是RTS,则是Camera),当参照点足够接近某个虚拟格...

坐标转换,这次是反过来,屏幕坐标转换成世界坐标

今天是做 安卓屏幕滑动交互的时候,发现原来安卓屏幕的坐标是屏幕坐标  坐标为 屏幕左下角0,0  右上角  1920*1080  是以像素为单位的。 那么每个手机都不一样 所以如果以这个坐标来判断是左手滑动屏幕还是右手滑动屏幕会产生问题。 而我这款游戏 摄像机是不动的  摄像机一直对着前方 摄像机的中心就是世界坐标的圆心 , 那么 我把屏幕坐标换成世界坐标...