Javacv: decodificando o fluxo "live" do H.264 vindo do servidor red5 no dispositivo Android
Aqui está o meu problema: implementei um aplicativo no lado do servidor usando Red5, que envia transmissão ao vivo codificada em H.264, no lado do cliente o fluxo é recebido como byte []
Para decodificá-lo no lado do cliente Android, segui oJavacv-FFmpeg biblioteca. O código para decodificação é o seguinte
public Frame decodeVideo(byte[] data,long timestamp){
frame.image = null;
frame.samples = null;
avcodec.av_init_packet(pkt);
BytePointer video_data = new BytePointer(data);
avcodec.AVCodec codec = avcodec.avcodec_find_decoder(codec_id);
video_c = null;
video_c = avcodec.avcodec_alloc_context3(codec);
video_c.width(320);
video_c.height(240);
video_c.pix_fmt(0);
video_c.flags2(video_c.flags2()|avcodec.CODEC_FLAG2_CHUNKS);
avcodec.avcodec_open2(video_c, codec, null))
picture = avcodec.avcodec_alloc_frame()
pkt.data(video_data);
pkt.size(data.length);
int len = avcodec.avcodec_decode_video2(video_c, picture, got_frame, pkt);
if ((len >= 0) && ( got_frame[0] != 0)) {
....
process the decoded frame into **IPLImage of Javacv** and render it with **Imageview** of Android
}
}
Os dados recebidos do servidor são os seguintes
Poucos quadros com o seguinte padrão
17 01 00 00 00 00 00 00 02 09 10 00 00 00 0F 06 00 01 C0 01 07 09 08 04 9A 00 00 03 00 80 00 00 16 EF 65 88 80 07 00 05 6C 98 90 00...
Muitos quadros tendo o seguinte padrão
27 01 00 00 00 00 00 00 02 09 30 00 00 00 0C 06 01 07 09 08 05 9A 00 00 03 00 80 00 00 0D 77 41 9A 02 04 15 B5 06 20 E3 11 E2 3C 46 ....
Com o codec H.264 para decodificador, o decodificador gera comprimento> 0, mas got_frames = 0 sempre.
Com o codec MPEG1, o decodificador gera comprimento> 0 e got_frames> 0, mas a imagem de saída é verde ou distorcida.
No entanto, após o código FFmpegFrameGrabber de javacv, eu posso decodificar os arquivos locais (codificados em H.264) com código semelhante ao descrito acima.
Gostaria de saber quais detalhes estão faltando, e manipulação de dados relacionados ao cabeçalho ou configuração do codec apropriado para o decodificador.
Qualquer sugestão, ajuda apreciada.
Desde já, obrigado.