Thank you Hung, Nguyen Viet , I've added these 32 bits headers, but it does not work. my program at server end is something like this:
int saveFrame(void *ctx, unsigned char *pixels, int frameWidth, int frameHeight, unsigned char **out, int *len) { Ctx *c = (Ctx*)ctx; // convert RGB colorspace image buffer to YCrCb format RGB2YUV(frameWidth, frameHeight, pixels, pic_in.img.plane[0], pic_in.img.plane[1], pic_in.img.plane[2], false); for (int i =0; i<4; i++) { c->picture.img.plane[i] = pic_in.img.plane[i]; c->picture.img.i_stride[i] = frameWidth; } // c->picture.i_pts=c->get_pts(c); x264_picture_t pic_out; x264_nal_t* nals; x264_picture_t *pic = &c->picture; int i_nals; int frame_size = x264_encoder_encode(c->x264, &nals, &i_nals, pic, &pic_out); if( frame_size ) encode_nals(c, nals, i_nals); *out = (unsigned char *)c->output; *len = c->output_datasize; if (i_nals > 0) { c->info_valid = 1; c->info_key_frame = pic_out.b_keyframe; c->info_pts = pic_out.i_pts; c->info_dts = pic_out.i_dts; } else return 0; return 1; } static int encode_nals (Ctx *c, x264_nal_t *nals, int nal_cnt) { char *pout = (char*)c->output; c->output_datasize = 0; for (int i = 0; i < nal_cnt; i++) { if (c->output_datasize + nals[i].i_payload > c->output_bufsize) { c->output_bufsize = (c->output_datasize+nals[i].i_payload+frameWidth)/frameWidth * frameHeight; c->output = realloc(c->output, c->output_bufsize); } memcpy(pout+c->output_datasize, nals[i].p_payload, nals[i].i_payload); c->output_datasize += nals[i].i_payload; } return c->output_datasize; } Sincerely, Yinxia 2012/3/23 Việt Hùng Nguyễn <hungtro...@gmail.com> > And before you send data to decoder, remember put 4 bytes header 0x00 0x00 > 0x00 0x01. > > Hung, Nguyen Viet > >
_______________________________________________ Libav-user mailing list Libav-user@ffmpeg.org http://ffmpeg.org/mailman/listinfo/libav-user