這裏是我的問題, 我已經實現用Red5的服務器端應用程序,它發送H.264編碼的直播流,客戶端上的流被接收作爲字節[]
爲了它在Android客戶端解碼我按照Javacv-FFmpeg的庫。用於解碼的代碼如下從服務器接收Javacv:解碼H.264「活」流從RED5服務器未來的Android設備上
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
}
}
數據如下具有
幾幀以下圖案
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 65 EF 88 80 07 00 05 6C 98 90 00 ...
許多幀具有以下圖案
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 ....
對於解碼器的H.264編解碼器,解碼器輸出長度> 0,但got_frames = 0。
對於MPEG1編解碼器,解碼器輸出長度> 0且got_frames> 0,但輸出圖像爲綠色或失真。
然而以下javacv我可以解碼的本地文件的FFmpegFrameGrabber代碼(H.264編碼)與類似的代碼如上。
我不知道細節我很想念,又適合解碼器頭相關的數據操作或設定編解碼器。
任何建議,幫助表示讚賞。
在此先感謝。