1、ijkplayer 编码

IjkPlayer支持硬解码和软解码。 软解码时不会旋转视频角度这时需要你通过onInfowhat == 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);

2、ijkplayer 倍速播放

目前ijkplayer最新版本支持倍速播放(版本号0.7.7.1)。在早期版本对倍速播放支持的不是很好,只有6.0及以上的手机才能进行倍速播放。但是目前虽然所有的机型都支持倍速,但是6.0以下的手机明显有声调变化,这样用户体验不是很好(针对变调的文章会在以后更新)。下面是最新的倍速设置代码:

public void setSpeed(float speed) {_setPropertyFloat(FFP_PROP_FLOAT_PLAYBACK_RATE, speed);
}

老版本代码:

@TargetApi(Build.VERSION_CODES.M)public void setSpeed(float speed) {_setPropertyFloat(FFP_PROP_FLOAT_PLAYBACK_RATE, speed);}

老版本代码只能设置速度,不能获取,所以基本上不能用(而且机型方面只支持6.0以上的机型)。


更新:当前最新版本为0.8.8,倍速功能能够在所有android机型上正常使用,倍速时可能也存在声调问题,但是可以通过设置参数来解决:

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1);

此问题,本人也专门写了一篇文章做了详细的说明,文章地址为:https://www.cnblogs.com/renhui/p/6510872.html

3、ijkplayer的一些重要的视频返回码

int MEDIA_INFO_VIDEO_RENDERING_START = 3;//视频准备渲染
int MEDIA_INFO_BUFFERING_START = 701;//开始缓冲
int MEDIA_INFO_BUFFERING_END = 702;//缓冲结束
int MEDIA_INFO_VIDEO_ROTATION_CHANGED = 10001;//视频选择信息
int MEDIA_ERROR_SERVER_DIED = 100;//视频中断,一般是视频源异常或者不支持的视频类型。
int MEDIA_ERROR_IJK_PLAYER = -10000,//一般是视频源有问题或者数据格式不支持,比如音频不是AAC之类的
int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200;//数据错误没有有效的回收

4、Ijkplayer调用seekTo存在的问题

ijkplyer 在播放部分视频时,调用seekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题(GOP导致的),视频压缩比较高,而seek只支持关键帧,出现这个情况就是原始的视频文件中i帧比较少,播放器会在拖动的位置找最近的关键帧。所以,目前针对此问题ijkPlayer无解。

注:目前最新版0.8.8相对于之前的版本来说,seekTo的问题应该会小很多,但是不可避免的还是会存在。

相关代码:

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

5. Ijkplayer音视频不同步问题

在开始使用过程当中对rtmp视频流进行播放,会出现严重的视频音频不同步现象,并且随着播放的时间越长,视频与音频的差距越大。具体原因是CPU在处理视频帧的时候处理得太慢,默认的音视频同步方案是视频同步到音频, 导致了音频播放过快,视频跟不上。

{ "framedrop",                      "drop frames when cpu is too slow",OPTION_OFFSET(framedrop),       OPTION_INT(0, -1, 120) },

framedrop 控制着允许丢帧的范围。可以通过修改 framedrop 的数值来解决不同步的问题,framedrop 是在视频帧处理不过来的时候丢弃一些帧达到同步的效果。具体设置:

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

framedrop 的具体大小根据实际情况而定, 一般丢太多帧也不好,会影响用户的观看体验。

6、如何支持https链接播放?

如果你的项目要进行加密播放HLS协议的视频,要想支持https,须要在普通编译的基础上,进行一些配置。

接下来我们来编译openssl

a). init openssl

$ cd .. 进入到ijkplayer的目下
$ ./init-android-openssl.sh 去远程仓库拉取openssl的远程代码,如果是iOS的,这里是init-ios-openssl.h 

b). compile openssl

$ cd android/contrib
$ ./compile-openssl.sh clean
$ ./compile-openssl.sh all

经过以上步骤已经编译好openssl了,然后我们执行一下方法

$./compile-ffmpeg.sh clean
编译ffmpeg软解码库,这个过程会生成各种架构的ffmpeg 这个过程比较耗时
$./compile-ffmpeg.sh all

7、Ijkplayer使用小技巧

a. 下载速度可以通过IjkMediaPlayer的 getTcpSpeed获取。

b. 高分辨率开启硬解码,不支持的话会自动切换到软解,就算开启mediacodec,如果设备不支持,显示的解码器也是avcodec软解。

c. IjkMediaPlayer.setOption可配置的对应头文件参考:ff_ffplay_options。

d. 设置cookie 可以通过ijkPlayer的public void setDataSource(String path, Map<String, String> headers) 的header实现设置,参考ijkPlayer的issues-1150,headers也是在内部被转化为何issuses一样的setOption方法

8、 基于ijkplayer的开源播放器推荐

GSYVideoPlayer

转载于:https://www.cnblogs.com/renhui/p/6420140.html

开源播放器 ijkplayer (一) :使用Ijkplayer播放直播视频相关推荐

  1. H5网页播放器EasyPlayer.js也能做直播视频实时录像了

    EasyPlayer系列做了整整8年了,从最开始的EasyPlayer RTSP版,到后来的RTMP版.Pro版.js版,受众用户已经不计其数了,希望EasyPlayer能一如既往的优秀下去! 最近, ...

  2. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  3. 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)

    前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...

  4. 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)...

    前言 关键字:Vitamio.VPlayer.Android播放器.Android影音.Android开源播放器 本章节把Android万能播放器本地播放的主要功能(缓存播放列表和A-Z快速查询功能) ...

  5. 最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  6. html iframe视频自动播放的属性,iframe通用js播放器myplayer.js加自动播放参数

    我的播放器调用方式,通用js播放器myplayer.js打开自动播放&后面的多余参数藐视不受影响. iframe可用于通用视频地址,.MP4去掉所有尾巴 &参数 最终自动播放mypla ...

  7. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

    前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  8. [转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...

    前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  9. 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)

    前言 新版本的VPlayer由设计转入开发阶段,预计开发周期为一个月,这也意味着新版本的Vitamio将随之发布,开发者们可以和本系列文章一样,先开发其他功能.本章内容为"在线视频播放列表& ...

  10. android 百度网盘 播放器,最好用的安卓播放器,支持云盘播放,看电影必备

    原标题:最好用的安卓播放器,支持云盘播放,看电影必备 你最喜欢用什么播放器来看电影? 或许腾讯视频.优酷等主流的点播播放器是数千万人的选择,但有时,我们也需要一款好用.离线.轻量级别的本地播放器来播放 ...

最新文章

  1. 〖Python〗-- 性能相关及深度优先与广度优先
  2. socket缓冲区以及阻塞模式详解
  3. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----CC篇
  4. Effective Java之列表由于数组(二十五)
  5. Guava 实用操作集合
  6. node.js(八 --- express)
  7. 骑马与砍杀服务器修复,骑马与砍杀21.3.1公共版和热修说明 修复联机模式
  8. 计算机毕业论文技术可行性怎么写,毕业论文怎么写可行性分析?
  9. jsp教师信息管理系统
  10. ESP8266通过VS1838B 解码红外遥控器
  11. 实对称阵可对角化的几种证明
  12. 内容市场的2017年:五件大事,每件事都惊心动魄
  13. 使用富盛Sbo-Addon程序开发框架轻松开发模态单据选择查询功能实例
  14. java+vue+onlyoffice的简单集成
  15. 佐切的第三天学习分享
  16. 海康威视错误代码0xf_调用海康威视sdk获取车牌号
  17. 小红书引流软件有哪些
  18. 【Android 10 源码】healthd 模块 HAL 2.0 分析
  19. 案例 | 沃尔玛 x 腾讯云 Serverless 应用实践,全力保障消费者购物体验
  20. unity找隐藏游戏对象Gameobject

热门文章

  1. 计算机存储的大小端模式解析
  2. CTFshow 反序列化 web269
  3. [YTU]_2759( 字符串---统计元音)
  4. log--求自然对数
  5. matplotlib显示中文(显现中文之后负号无法显示)
  6. 学完css3的总结,css3中常见的单位及总结
  7. 计算机管理窗口下的菜单,win7电脑右键打不开管理菜单的详细攻略
  8. HTML5 新增内容
  9. 看来我的计时器的应用还要加强才行呀
  10. ERP系统的一般构成示意图