Ijkplayer-rtsp首开速度优化
Ijkplayer-rtsp首开速度优化
配置1. 速度首开50(进度条进度)
IJKMEDIA: ===== options =====
IJKMEDIA: player-opts : opensles = 1
IJKMEDIA: player-opts : overlay-format = 842225234
IJKMEDIA: player-opts : mediacodec = 1
IJKMEDIA: player-opts : mediacodec-hevc = 1
IJKMEDIA: player-opts : packet-buffering = 0
IJKMEDIA: player-opts : fast = 1
IJKMEDIA: player-opts : mediacodec-handle-resolution-change = 0
IJKMEDIA: player-opts : framedrop = 1
IJKMEDIA: player-opts : start-on-prepared = 1
IJKMEDIA: player-opts : reconnect = 5
IJKMEDIA: format-opts : ijkapplication = -1284518032
IJKMEDIA: format-opts : ijkiomanager = -1414032000
IJKMEDIA: format-opts : rtsp_transport = tcp
IJKMEDIA: format-opts : rtsp_flags = prefer_tcp
IJKMEDIA: format-opts : http-detect-range-support = 1
IJKMEDIA: format-opts : buffer_size = 1316
IJKMEDIA: format-opts : max-buffer-size = 0
IJKMEDIA: format-opts : infbuf = 1
IJKMEDIA: format-opts : analyzemaxduration = 100
IJKMEDIA: format-opts : probesize = 1024
IJKMEDIA: format-opts : flush_packets = 1
IJKMEDIA: codec-opts : skip_loop_filter = 48
IJKMEDIA: ===================
配置2. 首开速度20(进度条进度)左右
===== options =====
SDL_RunThread: [30113] ff_msg_loop
player-opts : opensles = 1
player-opts : overlay-format = 842225234
message_loop
player-opts : mediacodec = 1
player-opts : mediacodec-hevc = 1
player-opts : packet-buffering = 0
player-opts : fast = 1
player-opts : mediacodec-handle-resolution-change = 0
player-opts : framedrop = 1
player-opts : start-on-prepared = 1
player-opts : reconnect = 5
format-opts : ijkapplication = -1351159456
format-opts : ijkiomanager = -1078774656
format-opts : rtsp_transport = tcp
format-opts : rtsp_flags = prefer_tcp
format-opts : http-detect-range-support = 1
format-opts : buffer_size = 1024
format-opts : max-buffer-size = 0
format-opts : max-fps = 20
format-opts : infbuf = 1
format-opts : analyzemaxduration = 80
format-opts : probesize = 800
format-opts : flush_packets = 1
codec-opts : skip_loop_filter = 48
===================
配置3. 兼容h265 (软解码)
I/IJKMEDIA: ===== options =====
I/IJKMEDIA: player-opts : overlay-format = 842225234
I/IJKMEDIA: player-opts : packet-buffering = 0
I/IJKMEDIA: player-opts : fast = 1
I/IJKMEDIA: player-opts : mediacodec-handle-resolution-change = 0
I/IJKMEDIA: player-opts : framedrop = 1
I/IJKMEDIA: player-opts : start-on-prepared = 1
I/IJKMEDIA: player-opts : reconnect = 5
I/IJKMEDIA: format-opts : ijkapplication = -1264208880
I/IJKMEDIA: format-opts : ijkiomanager = -1200070016
I/IJKMEDIA: format-opts : rtsp_transport = tcp
I/IJKMEDIA: format-opts : rtsp_flags = prefer_tcp
I/IJKMEDIA: format-opts : http-detect-range-support = 1
I/IJKMEDIA: format-opts : buffer_size = 1024
I/IJKMEDIA: format-opts : max-fps = 25
I/IJKMEDIA: format-opts : infbuf = 1
I/IJKMEDIA: format-opts : analyzemaxduration = 100
I/IJKMEDIA: format-opts : probesize = 1024
I/IJKMEDIA: format-opts : flush_packets = 1
I/IJKMEDIA: format-opts : dns_cache_clear = 1
I/IJKMEDIA: codec-opts : skip_loop_filter = 48
I/IJKMEDIA: ===================
Android端参数配置解释1:开启 0:关闭
//开启opensles.开启后h265无法播放. do:h265关闭硬件加速
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 1);
//开启硬解码mediacodec,开启后h265无法播放. do:h265关闭硬件加速
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
//开启h265硬解码.开启后h265无法播放. do:h265关闭硬件加速
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-hevc", 1);
//rtsp支持
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp");
//开启丢帧策略.
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 1);
//增加rtmp打开速度. 没有缓存会黑屏1s.
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1024);//1316
//最大帧率 20
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "max-fps", 25);
// 无限读
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "infbuf", 1);
// 设置播放前的最大探测时间 (100未测试是否是最佳值)
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzemaxduration", 100L);
// 播放前的探测Size,默认是1M, 改小一点会出画面更快
ijkMediaPlayer.setOption(1, "probesize", 1024L);
// 每处理一个packet之后刷新io上下文
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1L);
// 不额外优化(使能非规范兼容优化,默认值0 )
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "fast", 1);
// 处理分辨率变化
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-handle-resolution-change", 0);
// 是否开启预缓冲,直接禁用否则会有14s的卡顿缓冲时间.
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0L);
//开启丢帧.
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1L);
//准备好了就播放.提高首开熟读.
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 1);
// 设置是否开启环路过滤: 0开启,画面质量高,解码开销大,48关闭,画面质量差点,解码开销小
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48L);
// 播放重连次数
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"reconnect",5);
//清空dns,因为多种协议播放会缓存协议导致播放h264后无法播放h265.
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);