Soru Bu H264 NAL Header ne anlama geliyor?


0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a

Bildiğim kadarıyla, 0000 01 NAL Birimini tanımlamak için başlangıç ​​önek kodudur. "09 ...." ne anlama geliyor? Üstbilgi tipi bayt mı?


25
2017-11-06 04:58


Menşei




Cevaplar:


0x000001 NAL başlangıç ​​önek kodudur (aynı zamanda enkoder uygulamasına bağlı olarak 0x00000001 de olabilir). 0x09, 0 = 00001001'dir, bu da F = 0, NRI = 0 anlamına gelir ve tür 0b01001'dir. Bu özel tip bir erişim birimi sınırlayıcısıdır. Hemen dizisi parametre kümesi olan bir NAL türü olan 0x67 ile tanımlanan başka bir NAL birimi tarafından izlendiğine dikkat edin.

Resim parametre seti de var:

00 0001 68 ...

... ve bir ana karenin başlangıcı:

0000 0001 65 ...


35
2018-05-18 21:39





Ne tür bir NAL aradığınızı anlamanız için önemli bir referanstır. http://www.itu.int/rec/T-REC-H.264-201304-S . Özellikle, sayfa 63'teki tablo (Ocak 2014 itibariyle) tüm geçerli NAL türlerini listeler.

Neye baktığınızı anlamak için ilk 4 bayta bakın. Eğer NAL “Ek B” çerçevesindeyse, ya olacaklar. 00 00 01 veya 00 00 00 01. Bu sıra, H.264 bit akışında yasaklanmış / bastırılmıştır, böylece bir NAL'in başlangıcına baktığınızdan emin olduğunu görürsünüz. NAL türü, 1. kodun ardından 5 düşük sipariş bitidir:

int nalType = p[2] == 1 ? (p[3] & 0x1f) : (p[4] & 0x1f);

Ayrıca, H.264 jargon IDR'de, I-çerçevesi ve IDR olmayanlar P veya B çerçeveleri anlamına gelir.

Yukarıdaki bilgilerle yukarıdaki akıma bakabilir ve bir erişim birimi sınırlayıcıyı, ardından SPS, PPS ve ilk I-Frame'i izleyebiliriz.


11
2018-01-13 20:36



Düzeltme: Tüm IDR çerçeveleri I-kareleridir, ancak tüm I-kareleri IDR kareleri değildir. IDR (Anlık Dekoder Yenileme) çerçeveleri, yalnızca tam bir resim içermeyen, aynı zamanda P / B çerçevesinin olmadığını gösteren özel I-kareleridir. sonra IDR bir çerçeveye başvuruda bulunmasına izin verilir önce IDR. - Iwillnotexist Idonotexist


    0000 0109 1000 0001 6742 0020 e900 800c
    3200 0001 68ce 3c80 0000 0001 6588 801a

-> 000001| 09 (AUD)| 10 | 000001 | 67(SPS) | xxxx (SPS data)
   xx | 000001 | 68 (PPS)| xxxx (PPS data)

AUD, SPS, PPS, NALU türünü (Ağ Soyutlama Katman Birimleri) NALU'nun yaklaşık 31 türü var.

09 AUD anlamı Erişim Birimi Delimiter.

Erişim Birimi Ayırıcı (AUD). AUD, olabilecek isteğe bağlı bir NALU'dur   Bir temel akıştaki çerçeveleri sınırlamak için kullanın. Gerekli değildir   (konteyner / protokol tarafından aksi belirtilmedikçe, TS gibi) ve   genellikle yer kazanmak için dahil değildir, ancak   Her bir NALU'yu tamamen ayrıştırmadan bir çerçevenin başlangıcını bulur.

Şuna göz at Cevap daha fazla bilgi için.

Benim de var soru h264 akışının nasıl çözüleceği hakkında (iOS'ta).


6
2017-10-24 09:34



Bu 10'un anlamını 09 (AUD) sonra biliyor musunuz? - Hwangho Kim


Bu paket tipini tanımlar. Formatı:

+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI|  Type   |
+---------------+

Bunun bir h.264 NAL başlığı olduğundan emin misin? Sağladığınızdan, bu sağladığınız içeriğe sahip başlık olarak görünmüyor.


2
2017-11-06 06:08



Video akışını analiz etmek için bir video akışı analiz aracı kullandım ve çerçevelerin sınırını işaret ediyor. Ben bir I çerçevesinin başlangıcını aldım. Ve önek kodu "00 00 01" de bunun bir NAL olduğunu gösterdi. - ablmf
Bu önek kodu, bir NAL olduğunu göstermez, çünkü 0000 0109, 8 bayttır (64 bit) ve ilk 16 baytın karıştırılması, NAL'yi belirten önek kodunu verecektir. Unutmayın, bir hex çöplüğüne bakıyorsunuz ama tüm özellikler ve tanımlar ikiliye atıfta bulunuyor. - Matt
err, Yukarıdaki yorumda matematiğimde başarısız oldum, 0000 0109 4 byte değil, 8 (ve 32 bit, 64 değil), ama yine de aradığınız önek koduna mangle olmayacak. - Matt
@Matt Aslında 00000109'un 000001 bölümü geçerli bir NAL senkronizasyon / önek dizisi gibi görünüyor - flamming_python