我編碼實時渲染視頻內容,MPG和/或MP4的使用ffmpeg的C API(取決於視頻的後期使用)。當編碼爲MP4,一切都很好。但是,當編碼爲mpg時,所得到的視頻不能由任何播放器播放。快速調用ffprobe可以發現頭部缺失。但是這似乎幾乎不可能,因爲我明確地寫了它。頭在MPG失蹤,儘管使用avformat_write_header
這是我怎麼寫的標題,被編碼的任何幀之前:
// ptr->oc is the AVFormatContext
int error = avformat_write_header(ptr->oc, NULL);
if (error < 0)
{
s_logFile << "Could not write header. Error: " << error << endl;
fprintf(stderr, "Could not write header. Error: '%i'\n", error);
return 1;
}
有寫頭的時候從來沒有任何錯誤。
對於編碼,我下面the official muxing.c example的,所以我設置CODEC_FLAG_GLOBAL_HEADER標誌。我使用CODEC_ID_MPEG2VIDEO(用於視頻)和CODEC_ID_MP2(用於音頻)。
結果MPG不工作時,我「編碼」它與外部的ffmpeg可執行這樣的附加步驟:「的ffmpeg -i ownEncoded.mpg -sameq -y working.mpg」。 因此,似乎所有的數據是存在的,只有標題是缺少某種原因...
這裏是唯一的ffmpeg之前報告/寫頭時:
mpeg -------------------
lvl: 24
msg: VBV buffer size not set, muxing may fail
莫非是問題?
我不知道什麼可能是錯在這裏,我的MP4編碼具有完全相同的功能,除了編碼的MP4時設置像Q最小,最大尿流率,me_method等一些特殊的價值。我可能必須設置任何特殊值,以便ffmpeg確實能夠正確寫入標題?
指定您正在使用的格式/ vcodec/acodec。 「MPEG」/ 「mpeg1video」/ 「MP2」? – pogorskiy
這是mpeg2video/mp2。將它添加到問題中。 – TheSHEEEP
哦,我的!原來我有一個錯誤導致CODEC_ID_MPEG2VIDEO沒有正確設置,而是使用H264。感謝提示,這讓我再次看到它:) – TheSHEEEP