2010-03-04 5 views
12

Was bedeuten die dekodierten Base64-Bytes in SPP-Parametersätzen in SDP für einen h264-Stream? Wie kann ich die Videogröße von diesem Beispiel erfahren?Wie spropp-Parameter-Sätze in einem H264 SDP dekodieren?

SDP Beispiel:

sprop-parameter-sets=Z0IAKeNQFAe2AtwEBAaQeJEV,aM48gA== 

Erster Teil von Base64 zu Base16 decodiert:

67 42 00 29 E3 50 14 07 B6 02 DC 04 04 06 90 78 91 15 

zweiten Teil (Komma getrennt):

68 CE 3C 80 

ANSWER:Fetching the dimensions of a H264Video stream

Antwort

12

Die Spezifikation benötigen Sie zum kostenlosen Download von der Website der ITU hier erhältlich: - H.264 (03/10)

Wählen Sie das frei herunterladbare PDF und Sie werden das Format in Abschnitt 7.3.2.1 ausführlich finden .1.

Sorry, war nicht mit meiner vorherigen Antwort stumpf, nur wusste nicht, dass die Informationen in der Public Domain verfügbar waren.

+0

DUDE DU REGEL !!!!!!!!! THANX! = D – Cipi

+2

Die URL in der Antwort ist veraltet, hier ist die neue: http://www.itu.int/rec/T-REC-H.264/en – Cipi

+0

Die Spezifikation ist nicht mehr ohne eine TIES Mitgliedschaft oder Kauf verfügbar eine Kopie. – Deanna

1

Wie sich herausstellt, ist die Antwort auf meine Frage in diesem Dokument geschrieben: ISO/IEC 14496-10: 2005, unter Abschnitt 7.3.2.1. Und um es zu bekommen, muss ich bezahlen. So ... =)

+0

Es scheint, dass Sie das Dokument hier herunterladen können: http://www.itu.int/rec /T-REC-H.264/de – Flame

+0

Danke für das Update! :) – Cipi

6

Natürlich ist die Spezifikation immer am besten, aber die SPROP-Parameter-Sets im SDP bestehen im Allgemeinen aus Ihren Sequenz-Parameter- und Bild-Parameter-Sets, Basis-64 codiert und durch ein Komma begrenzt. Die Sequenzparameter- und Bildparametersätze teilen dem Decoder grundsätzlich mit, wie der eingehende H264-Strom richtig zu decodieren ist; ohne sie kann man nicht richtig dekodieren.

Das Schreiben eines Parsers für SPS/PPS ist nicht so schwierig, obwohl Sie dazu die Spezifikation unbedingt benötigen. Sie benötigen außerdem eine gute Bit-Reader-Klasse und Kenntnisse darüber, wie die exponentielle Golomb-Codierung sowohl für vorzeichenbehaftete als auch für vorzeichenlose Werte funktioniert. Siehe here und here.

Schließlich war der Code in this thread auf Doom9 von unschätzbarem Wert für mich - es ist im Grunde ein Parser für einen elementaren H264-Stream. Es enthält eine Bit-Reader-Klasse, Routinen zum Analysieren von NALU-, SPS-, PPS-, VUI-Parametern, Sequenzskalierungsmatrizen usw. Es ist ein ziemlich handliches Stück Code für jeden Videoingenieur.

+0

Thanx, ich schaffte es bereits mit diesem zu entschlüsseln: http://www.itu.int/rec/T-REC-H.264-200903-I/en. =) – Cipi

1

Die Videogröße ist in der "framesize" Zeile von SDP, nicht wahr?

00028 int av_strstart(const char *str, const char *pfx, const char **ptr) 
00029 { 
00030  while (*pfx && *pfx == *str) { 
00031   pfx++; 
00032   str++; 
00033  } 
00034  if (!*pfx && ptr) 
00035   *ptr = str; 
00036  return !*pfx; 
00037 } 
00038 

p ist ein Zeiger Ihrer Linie SDP

 if (av_strstart(p, "framesize:", &p)) { 
00370   char buf1[50]; 
00371   char *dst = buf1; 
00372 
00373   // remove the protocol identifier.. 
00374   while (*p && *p == ' ') p++; // strip spaces. 
00375   while (*p && *p != ' ') p++; // eat protocol identifier 
00376   while (*p && *p == ' ') p++; // strip trailing spaces. 
00377   while (*p && *p != '-' && (dst - buf1) < sizeof(buf1) - 1) { 
00378    *dst++ = *p++; 
00379   } 
00380   *dst = '\0'; 
00381 
00382   // a='framesize:96 320-240' 
00383   // set our parameters.. 
00384   codec->width = atoi(buf1); 
00385   codec->height = atoi(p + 1); // skip the - 
00386   codec->pix_fmt = PIX_FMT_YUV420P; 
      } 

Referenz: http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/rtpdec__h264_8c-source.html#l00360

+1

Aktualisiert, das Dokument in der angenommenen Antwort erklärt, wie die Parametersätze zu decodieren ... – Cipi

Verwandte Themen