Как кодировать видео с помощью ffmpeg для воспроизведения на Android? - PullRequest
1 голос
/ 02 января 2012

У меня есть библиотека 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)», но эти флаги являются частью базового профиля!

1 Ответ

2 голосов
/ 03 января 2012

Я получил базовое кодирование со следующими параметрами:

    codecContex->coder_type = 0;
    codecContex->flags|=CODEC_FLAG_LOOP_FILTER;
    codecContex->profile=FF_PROFILE_H264_BASELINE; //Baseline
    codecContex->scenechange_threshold = 40; 
    codecContex->gop_size=250;
    codecContex->max_b_frames=0;
    codecContex->max_qdiff=4;
    codecContex->me_method=7;
    codecContex->me_range=16;
    codecContex->me_cmp|= 1;
    codecContex->me_subpel_quality = 6; 
    codecContex->qmin=10;
    codecContex->qmax=51;
    codecContex->qcompress=0.6;
    codecContex->keyint_min=25;
    codecContex->trellis=0;
    codecContex->level=13; //Level 1.3
    codecContex->refs = 1;
    codecContex->weighted_p_pred = 0;
    codecContex->crf = 20.0f;
    codecContex->flags2|=CODEC_FLAG2_BPYRAMID-CODEC_FLAG2_WPRED-CODEC_FLAG2_8X8DCT;

... видео не будет воспроизводиться в элементе видео HTML5, но будет, если вы загрузите файл mp4 непосредственно в браузере.Фильм также должен иметь ширину 480 пикселей или менее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...