ठीक है तो मैंने इसे H264 स्ट्रीम के लिए निकाला।
मैं कैसे फ़्रेम पता लगाने के लिए:
- निकालें आरटीपी हैडर
- जांच h264 पेलोड में पहली बाइट का मूल्य
- अगर मूल्य 124 (0x7C) है यह एक मैं-फ्रेम है
मैं एमपीईजी 4-ईएस स्ट्रीम के लिए इसे समझ नहीं सकता ... कोई सुझाव?
संपादित करें: H264 IDR
यह मेरी h264 धारा (fmtp:96 packetization-mode=1; profile-level-id=420029;
) के लिए काम करता है। आप बस बाइट सरणी पास करते हैं जो आरटीपी के माध्यम से प्राप्त एच 264 खंड का प्रतिनिधित्व करता है। यदि आप संपूर्ण आरटीपी पास करना चाहते हैं, तो आरटीपी हेडर को छोड़ने के लिए RTPHeaderBytes
मान को सही करें। मुझे हमेशा आई-फ्रेम मिलता है, क्योंकि यह एकमात्र फ्रेम है जिसे खंडित किया जा सकता है, here देखें। मैं अपने सर्वर में कोड के इस (सरलीकृत) टुकड़े का उपयोग करता हूं, और यह एक आकर्षण की तरह काम करता है !!!! यदि I-Frame (IDR) खंडित नहीं है, तो fragment_type
5 होगा, इसलिए यह कोड खंडित और खंडित आईडीआर के लिए true
वापस करेगा।
public static bool isH264iFrame(byte[] paket)
{
int RTPHeaderBytes = 0;
int fragment_type = paket[RTPHeaderBytes + 0] & 0x1F;
int nal_type = paket[RTPHeaderBytes + 1] & 0x1F;
int start_bit = paket[RTPHeaderBytes + 1] & 0x80;
if (((fragment_type == 28 || fragment_type == 29) && nal_type == 5 && start_bit == 128) || fragment_type == 5)
{
return true;
}
return false;
}
यहाँ एनएएल इकाई प्रकार के टेबल है:
Type Name
0 [unspecified]
1 Coded slice
2 Data Partition A
3 Data Partition B
4 Data Partition C
5 IDR (Instantaneous Decoding Refresh) Picture
6 SEI (Supplemental Enhancement Information)
7 SPS (Sequence Parameter Set)
8 PPS (Picture Parameter Set)
9 Access Unit Delimiter
10 EoS (End of Sequence)
11 EoS (End of Stream)
12 Filter Data
13-23 [extended]
24-31 [unspecified]
संपादित करें 2: MPEG4 मैं-VOP
मैं चे और ISO IEC 14496-2 दस्तावेज़ में अद्यतन करने के लिए इस ... Thanx भूल गया, मैं इसे काम करने में कामयाब रहा! चे संस्कार उसके जवाब में इतना सटीक था, लेकिन नहीं ... इसलिए यहाँ मैं, पी और बी फ्रेम (आई-VOP, पी VOP, बी VOP) संक्षेप में लगाने के लिए कैसे है:
- VOP (वीडियो ऑब्जेक्ट प्लेन - फ्रेम) कोड
000001B6
(हेक्स) से शुरू होता है। यह सभी एमपीईजी 4 फ्रेम (आई, पी, बी)
अगला कई और जानकारी का पालन करता है, कि मैं यहां वर्णन नहीं कर रहा हूं (आईईसी दस्तावेज़ देखें), लेकिन हम केवल (जैसा कि कहा जाता है) की आवश्यकता है निम्नलिखित बाइट से उच्च 2 बिट्स (B6
मान के साथ बाइट के बाद अगले दो बिट्स)। उन 2 बिट्स आप VOP_CODING_TYPE बताओ, तालिका देखें:
VOP_CODING_TYPE (binary) Coding method
00 intra-coded (I)
01 predictive-coded (P)
10 bidirectionally-predictive-coded (B)
11 sprite (S)
तो, मैं-फ्रेम पैकेट चार बाइट्स 000001B6
और अगले बाइट 00
के उच्च दो टुकड़े होने के साथ शुरू लगता है खोजने के लिए। यह मुझे एक साधारण वीडियो ऑब्जेक्ट प्रकार (उन्नत सरल के लिए सुनिश्चित नहीं) के साथ एमपीईजी 4 स्ट्रीम में फ्रेम मिलेगा।
किसी अन्य समस्या के लिए, आप दिए गए दस्तावेज़ (ISO IEC 14496-2) देख सकते हैं, आप एमपीईजी 4 के बारे में जानना चाहते हैं।:)
सही (यहां तक कि बंद नहीं) नहीं है यही कारण है कि। यह उन धाराओं के लिए काम हो सकता है जिन्हें आप देख रहे हैं। आईईटीएफ में आरएफसी 3984 (जल्द ही 3 9 84bis के साथ प्रतिस्थापित किया जाएगा) देखें। ध्यान दें कि आप खंडित एनएएल (टुकड़े हेडर के साथ, कई एनएएल के साथ एसटीएपी पैकेट (और आईफ्रेम एक पैकेट के दूसरे एनएएल में शुरू कर सकते हैं), आदि आप वास्तव में पैकेट स्ट्रीम में सभी एनएएल स्कैन करना चाहते हैं एक आईडीआर शुरू करने वाले एनएएल।ध्यान दें कि वास्तविक आई-फ्रेम/सी-फ्रेम अनुक्रम और चित्र पैरामीटर सेट के एक सेट से पहले हो सकता है, जो * महत्वपूर्ण * हैं और आईडीआर का हिस्सा माना जाना चाहिए (लेकिन मार्कर नहीं हैं) – jesup
वैसे यह केवल काम करता है मेरे लिए तो ... = | – Cipi
@jesup आमतौर पर बैंड से बाहर पैरामीटर सेट नहीं हैं? इसके अलावा - हाय! फैंसी आपसे मिलकर ... –