У меня есть библиотека c ++, которая кодирует видео в реальном времени с веб-камер в файлы mp4 (H264). У меня есть следующие настройки:
codecContex->profile=FF_PROFILE_H264_BASELINE; //Baseline
codecContex->gop_size=250;
codecContex->max_b_frames=0;
codecContex->max_qdiff=4;
codecContex->me_method=libffmpeg::ME_HEX;
codecContex->me_range=16;
codecContex->qmin=10;
codecContex->qmax=51;
codecContex->qcompress=0.6;
codecContex->keyint_min=10;
codecContex->trellis=0;
codecContex->level=13; //Level 1.3
codecContex->weighted_p_pred = 2;
codecContex->flags2|=CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT;
Это создает файлы MP4, которые воспроизводятся на устройствах iOS и Windows Phone 7, но не на устройствах Android. Я читал, что Android поддерживает только фильмы, закодированные с базовым профилем. Эти настройки должны создать базовый фильм, но когда я смотрю на сгенерированный файл MP4 с MediaInfo, он говорит, что это AVC (High@L1.3). Возможно, поэтому он не работает, но я не могу заставить его что-то сгенерировать с помощью AVC (Baseline@L1.3) ...
Если удалить последнюю строку:
codecContex->flags2|=CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT;
Затем MediaInfo сообщает о файле как «AVC (Main@L1.3)», но эти флаги являются частью базового профиля!