Senden Sie Android h264-Captures über einen RTP-Stream
Ich schreibe einen RTP-Video-Streamer für Android, der h264-codierte Daten von einem lokalen Android-Socket liest und paketiert. Die Sache ist, dass ich es getan habe, aber ich bekomme weiterhin schwarze Rahmen auf der Clientseite (Voip).
Die Kommunikation geht so: Android -> Asterisk -> Jitsi (Osx) (und umgekehrt)
Es gibt ein paar Dinge, die ich noch nicht verstanden habe:
1) Der Mediarecorder von Android gibt mir einen rohen h264-Stream. Woher weiß ich, wann eine NAL basierend auf diesem Stream startet / endet? Es hat kein 0x000001-Muster, aber es hat ein 0x0000 (von dem ich annehme, dass es ein Trennzeichen ist)
BEARBEITEN:
Weitere Informationen hinzufügen. Dies sind 2 (zuerst, zweite) verschiedene Lesevorgänge des Eingangspuffers (in der Reihenfolge). Wenn ich es richtig gemacht habe, sollten die ersten 4 Bytes verwendet werden, um die NALU-Länge zu erhalten, und die fünfte (Index 4) ist der NALU-Header.
Ich kopiere hier die Werte des Bytes für die zukünftige Verwendung:
<code>1) 0 0 12 114 101 -72 4 25 -15 -1 -121 -53 ..... length = (114&0xFF) + (12&0xFF)*256 + (0&0xFF) length -> 3186 forbidden = 101 & 0x80 forbidden -> 0 nri = 101 & 0x60 nri -> 96 nal_unit_type = 101 & 0x1F nal_unit_type -> 5 2) 0 0 1 -93 97 -32 32 103 -14 93 -1 .... length = (-93&0xFF) + (1&0xFF)*256 + (0&0xFF) length -> 419 forbidden = 97 & 0x80 forbidden -> 0 nri = 97 & 0x60 nri -> 96 nal_unit_type = 97 & 0x1F nal_unit_type -> 1 </code>
ist das richtig?
2) Wie kann ich den NALu-Zeitstempel und seine Länge aus diesem Stream abrufen?
3) Aus irgendeinem Grund werden die Pakete markiert (auch wenn ich die Markierung aufgehoben habe). (Falls Sie die pcap-Datei überprüfen) [FEST: Ich habe nicht für jedes Paket den gleichen SSCR verwendet.]
Hier ist einpcap Erfassung des von Asterisk kommenden Streams (welcher von Android kommt). Das Android-Gerät ist ein Asus Transform Prime mit Android ICS.
Ich sende den Paketierungsmodus (1
) und Profile-Level-ID (42801e
) im sdp habe ich auch versucht die sprops zu versenden (sps:Z0KAHpWgUHxA
, psp:aM48gA==
) Parameter aber nichts geändert.
Prost.