一个完整的播放器,少不了会有很多的默认设置或者提供给用户设置的选项。而IjkPlayer 同样也用。
从Java层设置IjkPlayer播放器选项的流程请看这篇文章:https://www.jianshu.com/p/ab405e5bc1de 。
本篇记录上面博客中ff_ffplay_options.ffp_context_options中没解释的一些选项:
{ "max-buffer-size", "max buffer size should be pre-read",
OPTION_OFFSET(dcc.max_buffer_size), OPTION_INT(MAX_QUEUE_SIZE, 0, MAX_QUEUE_SIZE) },
{ "min-frames", "minimal frames to stop pre-reading",
OPTION_OFFSET(dcc.min_frames), OPTION_INT(DEFAULT_MIN_FRAMES, MIN_MIN_FRAMES, MAX_MIN_FRAMES) },
{ "first-high-water-mark-ms", "first chance to wakeup read_thread",
OPTION_OFFSET(dcc.first_high_water_mark_in_ms),
OPTION_INT(DEFAULT_FIRST_HIGH_WATER_MARK_IN_MS,
DEFAULT_FIRST_HIGH_WATER_MARK_IN_MS,
DEFAULT_LAST_HIGH_WATER_MARK_IN_MS) },
{ "next-high-water-mark-ms", "second chance to wakeup read_thread",
OPTION_OFFSET(dcc.next_high_water_mark_in_ms),
OPTION_INT(DEFAULT_NEXT_HIGH_WATER_MARK_IN_MS,
DEFAULT_FIRST_HIGH_WATER_MARK_IN_MS,
DEFAULT_LAST_HIGH_WATER_MARK_IN_MS) },
{ "last-high-water-mark-ms", "last chance to wakeup read_thread",
OPTION_OFFSET(dcc.last_high_water_mark_in_ms),
OPTION_INT(DEFAULT_LAST_HIGH_WATER_MARK_IN_MS,
DEFAULT_FIRST_HIGH_WATER_MARK_IN_MS,
DEFAULT_LAST_HIGH_WATER_MARK_IN_MS) },
首先需要先看懂一个选项表达的意思,下面以选项一为例:
{ "max-buffer-size", "max buffer size should be pre-read",
OPTION_OFFSET(dcc.max_buffer_size), OPTION_INT(MAX_QUEUE_SIZE, 0, MAX_QUEUE_SIZE) }
配置一个选项需要填写4个信息:
max-buffer-size:选项的名称;
max buffer size should be pre-read:选项的描述;
OPTION_OFFSET(dcc.max_buffer_size):选项对应的系统变量;
OPTION_INT(MAX_QUEUE_SIZE, 0, MAX_QUEUE_SIZE):选项的取值范围;
下面解释OPTION_OFFSET、OPTION_INT函数:
OPTION_OFFSET