IJK播放器问题集
IJK播放器问题集
在使用ijkplayer进行播放时候,时常会遇到一些问题,故记录下:
1 ijkplayer出现小窗切换到大窗画面卡住问题
检查是否大小窗口切换时候,频繁设置了surface。某些底层api频繁设置会导致画面不动。
//holder判断是否一样则不设置
if (mIjkMediaPlayer != null && holder != null && oldSurfaceHolder != holder) {
mIjkMediaPlayer.setDisplay(holder);
oldSurfaceHolder = holder;
}
2 ijkplayer播放出现花屏
检查是否设置buffer_size过小,过小可能会导致udp协议丢包花屏。
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1316 * 512);
3 ijkplayer设置日志级别
设置日志输出级别需先开启日志功能,再设置级别。
public static final int IJK_LOG_UNKNOWN = 0;
public static final int IJK_LOG_VERBOSE = 2;
public static final int IJK_LOG_DEBUG = 3;
public static final int IJK_LOG_INFO = 4;
public static final int IJK_LOG_WARN = 5;
public static final int IJK_LOG_ERROR = 6;
public static final int IJK_LOG_FATAL = 7;
public static final int IJK_LOG_SILENT = 8;
public void setLogLevel(int level) {
if (mIjkMediaPlayer != null) {
mIjkMediaPlayer.setLogEnabled(true);
mIjkMediaPlayer.native_setLogLevel(level);
}
}
4 ijkplayer存在无画面只有声音问题
检查是否未设置surfaceholder或者被设置空了,再次播放未设置。
setDisplay(SurfaceHolder sh)
5 ijkplayer播放占用cpu过大
检查是否播放使用的软解播放,如果是,建议使用硬解。
public static final int SOLUTION_MODE_HARD = 1;
public static final int SOLUTION_MODE_SOFT = 2;
public static final int SOLUTION_MODE_AUTO_SOFT = 3;
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", currentSolutionMode);
6 ijkplayer倍速播放设置
在android 6.0(Android API23)及以后才能实现音视频倍速播放,6.0以下可能不会报错,但是效果只有音频能够倍速。
rate取值:0.5~2
mIjkMediaPlayer.setSpeed(rate);
7 ijkplayer RTSP传输协议设置
优先tcp则需要如下设置:
mIjkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
否则使用默认的协商协议。
对于不支持tcp的流服务器,强制使用tcp会导致无法播放。
8 ijkplayer 无法播放
抓取网络包查看协议交互,是否存在传输协议不对或者端口不对导致无法收到数据流导致无法播放。
9 ijkplayer 起播慢问题
检查是否起播探测流大小设置过大。
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,“probesize”,1024*10);