Envie a captura do Android h264 por um fluxo de rtp
Estou escrevendo um streamer de vídeo RTF para Android que lê dados codificados h264 de um soquete local Android e empacotá-lo. A coisa é que eu fiz isso, mas eu continuo recebendo quadros negros no lado do cliente (Voip).
A comunicação é assim: Android -> Asterisk -> Jitsi (Osx) (e reverso)
Há algumas coisas que ainda não entendi:
1) Mediarecorder do Android me dá um fluxo h264 brutos, como posso saber quando um NAL começa / termina com base nesse fluxo? Ele não tem nenhum padrão 0x000001, mas ele tem um 0x0000 (que eu estou supondo que seja um separador)
EDITAR:
Adicionando mais informações. Estes são 2 (primeiro, segundo) leituras diferentes do buffer de entrada (em ordem). Se eu acertar, os primeiros 4 bytes devem ser usados para obter o comprimento NALU e o 5º (índice 4) é o cabeçalho NALU.
Vou copiar aqui os valores do byte para uso futuro:
<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>
isso está correto?
2) Como posso obter o registro de data e hora NALu e seu comprimento desse fluxo?
3) Por algum motivo, os pacotes estão sendo marcados (mesmo quando eu desarmar o marcador). (Caso você verifique o arquivo pcap)FIXO: Eu não estava usando o mesmo SSCR para cada pacote]
Aqui está umpcap captura do fluxo vindo do asterisco (que vem do Android). O dispositivo Android é um Asus Transform Prime com o Android ICS.
Estou enviando o modo de empacotamento (1
) e id de nível de perfil (42801e
) no sdp, também tentei enviar os sprops (sps:Z0KAHpWgUHxA
psp:aM48gA==
) parâmetro mas nada mudou.
Felicidades.