मैं कच्चे एच 264 को सी ++ में एफएफएमपीईजी एपीआई का उपयोग करके एक एमपी 4 कंटेनर में एन्कोड करने की कोशिश कर रहा हूं। यह सब ठीक काम करता है, फिर भी AVCC बॉक्स रिक्त है, और यह त्रुटि देता है: [आईएसओ फ़ाइल] बॉक्स "avcC" आकार 8 अवैधसी ++ एफएफएमपीईजी एवीसीसी बॉक्स की जानकारी नहीं लिख रहा
मैं तो आउटपुट फ़ाइल पर कमांड लाइन टूल का उपयोग करते हैं: ffmpeg - i output.mp4 -vcodec copy fixed.mp4
आउटपुट फ़ाइल काम करता है और AVCC आवश्यक जानकारी के साथ आबादी है। मुझे नुकसान है कि यह कमांड लाइन तर्क क्यों काम करता है लेकिन मैं एपीआई का उपयोग करके एक ही परिणाम उत्पन्न करने में असमर्थ हूं।
क्या मैं सी ++ कोड में क्या है (यह भी समारोह कॉल के बीच में बातें करते हैं):
outputFormat_ = av_guess_format("mp4", NULL, NULL); //AV_CODEC_H264
formatContext_ = avformat_alloc_context();
formatContext_->oformat = outputFormat_;
...
AVDictionary *opts = NULL;
char tmpstr[50]; sprintf(tmpstr, "%i", muxRate * KILOBYTESTOBYTES);
av_dict_set(&opts, "muxrate", tmpstr, 0);
avformat_write_header(formatContext_, &opts);
av_write_trailer(formatContext_);
इस के उत्पादन में सही है, सिवाय इसके कि इसे AVCC जानकारी अनुपलब्ध है। इसे जोड़ना मैन्युअल रूप से (और बॉक्स लम्बाई को तदनुसार ठीक करना) मुझे वीडियो ठीक करने देता है। कोई विचार क्यों एपीआई कॉल AVCC जानकारी उत्पन्न नहीं कर रहे हैं?
संदर्भ के लिए, यहां ठीक से पहले mp4 से वर्ण हैं: .avc1 ..............................8.H ... एच .......................................... yy ... .avcC .... stts
और उसके बाद: avc1 ..........................8.H ... एच .......................................... yy ...! avcC.B € (ÿá..gB € (Ú.à.- • ... hÎ < € .... stts
मुझे कैमरे से फ्रेम कैप्चर करते समय एक ही समस्या का सामना करना पड़ता है, और mp4 कंटेनर के अंदर h264 को एन्कोड करता है। क्या आपको कोई विचार है कि मैं 'extradata' कैसे सेट कर सकता हूं? – alijandro
क्या आपका कैमरा डेटा एच 264 आउटपुट कर रहा है? यदि ऐसा है, तो पीपीएस और एसपीएस ब्लॉक (क्रमशः 0x00 0x00 0x00 0x01 0x67 और 0x00 0x00 0x00 0x01 0x68) देखें। – awr
आपके उत्तर देने के लिए धन्यवाद। यह ffmpeg नई संस्करण एपीआई के कारण एक समस्या है, AVCodecContext से AVStream-> codecpar-> extradata से extradata को कॉपी करने से इस समस्या को ठीक किया जाता है। – alijandro