|
|
@@ -680,6 +680,19 @@ static bool init_avformat(mp_media_t *m)
|
|
|
if (m->buffering && !m->is_local_file && !is_rist)
|
|
|
av_dict_set_int(&opts, "buffer_size", m->buffering, 0);
|
|
|
|
|
|
+ if (m->ffmpeg_options) {
|
|
|
+ int ret = av_dict_parse_string(&opts, m->ffmpeg_options, "=",
|
|
|
+ " ", 0);
|
|
|
+ if (ret) {
|
|
|
+ blog(LOG_WARNING,
|
|
|
+ "Failed to parse FFmpeg options: %s\n%s",
|
|
|
+ av_err2str(ret), m->ffmpeg_options);
|
|
|
+ } else {
|
|
|
+ blog(LOG_INFO, "Set FFmpeg options: %s",
|
|
|
+ m->ffmpeg_options);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
m->fmt = avformat_alloc_context();
|
|
|
if (m->buffering == 0) {
|
|
|
m->fmt->flags |= AVFMT_FLAG_NOBUFFER;
|
|
|
@@ -863,6 +876,7 @@ bool mp_media_init(mp_media_t *media, const struct mp_media_info *info)
|
|
|
media->v_cb = info->v_cb;
|
|
|
media->a_cb = info->a_cb;
|
|
|
media->stop_cb = info->stop_cb;
|
|
|
+ media->ffmpeg_options = info->ffmpeg_options;
|
|
|
media->v_seek_cb = info->v_seek_cb;
|
|
|
media->v_preload_cb = info->v_preload_cb;
|
|
|
media->force_range = info->force_range;
|