zoukankan      html  css  js  c++  java
  • IJKPlayer问题集锦之不定时更新

    1、IJKPlayer 不像系统播放器会给你旋转视频角度,所以你需要通过onInfowhat == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去获取角度,自己旋转画面;或者开启硬解硬解码,不过硬解码容易造成黑屏无声,诸位慎重啊O__O "…。

    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 出现黑色有声音没图像,看看你的视频编码是不是H264,pixel format是否存在,音频编码是不是AAC?默认IJKPlayer是不支持3pg(支持它干啥(・-・)?),不支持mepg(比如这个库RecordVideoDemo ),不支持AMR。所以如果你真的想要支持,那么参考这个#1961,打开mpeg支持,重新编ffmpeg,然后通过硬解码播放mpeg;或者通过系统的录制VideoRecord;或者选另外的JAVACV录制封装FFmpegRecorder

    ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
    ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec_mpeg4", 1);
    

    **3、 **快进和慢放接口,已经支持全版本,如果遇到声调问题,可以设置:

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

    4、暂停的时候,退到后台再回到前台,画面黑了?

    1、
    这时候个人处理方式是,可以在暂停的时候,通过TextureView.getBitmap(point.x, point.y);获取到暂停的画面,用ImageView显示它,在onSurfaceTextureUpdated的时候隐藏ImageView,来实现画面的衔接。

    2、暂停时绘制静态画面多TextureView的Surface上,详细参考GSYVideoPlayer。

    5、一些视频返回码

    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;//数据错误没有有效的回收
    
    

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

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

    7、下载速度可以通过IjkMediaPlayer的getTcpSpeed获取。

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

    9、ijkMediaPlayer.setOption可配置的对应头文件参考:ff_ffplay_options

    10、缓冲进度条不到100,官方表示我就不保证都100,所以一般我都是:

    //95这个数值可能不准确,有些时候可能还需要低一些
    if (secProgress > 95) secProgress = 100;
    

    11、上面1、2、6的问题,在IJK封装的EXOPlayer和MediaPlayer都不会有问题,兼容上确实强过IJKPlayer,但是它们在细节上,却没有IJK处理的好,如EXOPlayer:退到后再回到前台、切换渲染控件的黑屏一段时间问题,除了用seekto之外目前没发现其他办法,这样的体验让我最后还是选择IJKPlayer。

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

    ** 13、**多个分片播放的功能,请查阅:
    issue64
    issue490
    分片播放资料

    14、硬解码黑屏相关issuse以及建议

    bilibili-issuse-1324

    15、出现声音画面不同步

    1、关了硬解码。

    2、参考如下:

    http://www.jianshu.com/p/a5cf04181f3d
    设置视频的倍速:
    [options setPlayerOptionIntValue:10 forKey:@"framedrop"];
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 60);

    16、rtsp播放失败问题

    https://github.com/CarGuo/GSYVideoPlayer/issues/232

    https://github.com/CarGuo/GSYVideoPlayer/issues/207

    17、m3u8拖动seek之后,加载很长时间

    https://github.com/Bilibili/ijkplayer/issues/2874

    https://github.com/CarGuo/GSYVideoPlayer/issues/252

    18、m3u8本地播放问题

    ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "protocol_whitelist", "crypto,file,http,https,tcp,tls,udp"); 
    

    19、断网自动重新连接
    url前接上ijkhttphook:,如

    String url = "ijkhttphook:http://baobab.wdjcdn.com/14564977406580.mp4";
    

    然后设置

    ((IjkMediaPlayer)mediaPlayer).setOnNativeInvokeListener(new IjkMediaPlayer.OnNativeInvokeListener() {
                @Override
                public boolean onNativeInvoke(int i, Bundle bundle) {
                    return true;
                }
            })
    

    20、url切换400(http与https域名共用)

    ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
    

    总的来说,兼容上还是谷歌的强,但是细节上还是IJKPlayer处理的好,一个是播放器兼容视频,一个是视频兼容播放器,看个人喜好吧︿( ̄︶ ̄)︿!

     
    一个爱猫的程序员老司机,致力于通俗易懂的愉悦♂开发。 https://github.com/CarGuo/
     
     
    https://www.jianshu.com/p/220b00d00deb
  • 相关阅读:
    表单中input name属性有无[]的区别
    验证器
    模板输出替换
    模型中的数据操作
    2020 倒计时 1 天,Python 工程师找工作更难了?
    80后、90后扎心图鉴
    2019,我赚钱了
    AI在自动化测试领域的应用
    我被裁掉的那一天
    【阿里巴巴】飞猪技术质量招聘
  • 原文地址:https://www.cnblogs.com/pengmn/p/9067732.html
Copyright © 2011-2022 走看看