2012-06-29 13 views
6

मुझे वीडियो की डीकोडीन आरटीएसपी स्ट्रीम के साथ कुछ मदद की ज़रूरत है। मुझे इसे एक्सिस आईपी-कैमरा से मिलता है। मैं इसके लिए ffmpeg पुस्तकालय का उपयोग करें। AVFodecContext को अलग से बनाने के लिए यह आवश्यक नहीं है, AVFormatContext-> धाराओं [...] -> कोडेक से नहीं;ffmpeg के साथ डीकोड एच 264 आरटीएसपी और अलग AVCodecContext

तो मैं एवीसीओडीसी, एवीकोडेक कॉन्टेक्स्ट बना देता हूं और उन्हें इनकार करने का प्रयास करता हूं।

AVCodec *codec=avcodec_find_decoder(codec_id); 
if(!codec) 
{ 
    qDebug()<<"FFMPEG failed to create codec"<<codec_id; 
    return false; //--> 
} 

AVCodecContext *context=avcodec_alloc_context3(codec); 
if(!context) 
{ 
    qDebug()<<"FFMPEG failed to allocate codec context"; 
    return false; //--> 
} 
avcodec_open2(context, codec, NULL); 

फिर अनुप्रयोग का मुख्य पाश में, मैं फ्रेम डेटा प्राप्त करें और डिकोड करने के लिए प्रयास करें:

_preallocatedFrame = avcodec_alloc_frame(); 
avcodec_decode_video2(_context, _preallocatedFrame, &got_picture, &_packet); 

मैं कंसोल में बहुत से संदेश मिलता है और यहाँ:

[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 

कर सकते हैं आप सलाह मुझे कुछ, कैसे AVCodecContext या कुछ और सही करने के लिए init करने के लिए?

उत्तर

4

आपको कुछ और काम करने की आवश्यकता है। यदि आप h.264 स्ट्रीम को डीकोड करना चाहते हैं तो आपको "एसपीएस पीपीएस" डेटा को डीकोडर पास करने की आवश्यकता है। यह डेटा आरटीपी स्ट्रीम पर ही see

या एसडीपी में वें आरटीएसपी वार्ता में पाया जा सकता है। सफलतापूर्वक इस डेटा के साथ डिकोडर फ़ीड करने के बाद, डिकोडिंग काम करना चाहिए।

+0

ठीक है, लेकिन अंतर कहां है। जब मुझे AVFormatContext-> स्ट्रीम [...] -> कोडेक से मेरा AVCodecContext मिलता है, और पूरी तरह से समान ऑपरेशन करता है, तो यह त्रुटियों के बिना डीकोड करता है। बीटी यह अलग है कि अलग कोडकॉन्टेक्स्ट का उपयोग करें (इसे संग्रह से डेटा प्राप्त करने के बाद डीकोड किया जा सकता है, डिस्क पर सहेजा जा सकता है, जब मैं प्रारूप प्रारूप नहीं कर सकता) – mmmaaak

+0

क्या आपने 2 संदर्भ वस्तुओं की तुलना करने की कोशिश की है? – Horonchik

+0

हां, उनके बीच 20 से अधिक भिन्न हैं। मैंने AVCOdecContext-> priv_data और अन्य पॉइंटर-फ़ील्ड को छोड़कर, मेरे संदर्भ में सभी अलग-अलग फ़ील्ड सेट करने का प्रयास किया - यह काम नहीं करता है। – mmmaaak

संबंधित मुद्दे