And before you send data to decoder, remember put 4 bytes header 0x00 0x00 0x00 0x01.
Hung, Nguyen Viet On Mar 23, 2012 8:48 PM, "Việt Hùng Nguyễn" <[email protected]> wrote: > Hi, you should use CODEC_ID_H264, cause libx264 produces h.264 video > stream and ffmpeg mpeg4 decoder can not decode h.264 video stream. > > Hung, Nguyen Viet > On Mar 23, 2012 8:11 PM, "ZHAO Yinxia" <[email protected]> wrote: > >> Hi huanggh0108, >> >> I am sure I have no audio frame... While, I use libx264 to encode the >> frames, and I am not sure I chose the right CODEC_ID for decoding. >> >> I use CODEC_ID_MPEG4. CODEC_ID_H264 looks more reasonable, but returns a >> "no frame" error. >> >> 2012/3/23 huanggh0108 <[email protected]> >> >>> ** >>> I guess the data may be audio frame, not video frame. The data should >>> be filtered before sending at the server end. >>> >>> >>> 2012-03-23 >>> ------------------------------ >>> huanggh0108 >>> ------------------------------ >>> *发件人:* Yinxia >>> *发送时间:* 2012-03-23 00:52:01 >>> *收件人:* libav-user >>> *抄送:* >>> *主题:* [Libav-user] Decoding Problem (got_picture always return 0) >>> Hi dear all, >>> >>> I am a newbie to ffmpeg and I would like to decode the bitstream, which is >>> >>> encoded using libx264 at the server end and sent to client frame by frame. >>> I wrote a function decodeFrame to decode this bitstream frame by frame, >>> this function is called in a loop, each time recieves a new frame: >>> void decodeFrame( int size, unsigned char *data) >>> { >>> avpkt.size = size; >>> avpkt.data = (uint8_t *)(data); >>> /*decode each frame*/ >>> len = avcodec_decode_video2(c, picture, &got_picture, avpkt.size); >>> if (len < 0) { >>> fprintf(stderr, "[avcodec][Err] Error while decoding frame %d\n",frame); >>> exit(1); >>> } >>> if (got_picture) { >>> printf("[avcodec] Saving frame %3d\n",frame); >>> fflush(stdout); >>> _snprintf(buf, sizeof(buf), "/temp/video%d.pgm", frame); // not found >>> >>> pgmSave(picture->data[0], picture->linesize[0], c->width, c->height, buf); >>> frame++; >>> } >>> } >>> I can successfully get the value of len, which is exactly the size of >>> frame, however, *the value of *got_picture *is always 0. *Can anyone help >>> me with this? >>> * >>> * >>> PS. this is the init function of decoder. >>> void initDecoder() >>> { >>> avcodec_register_all(); >>> av_init_packet(&avpkt); >>> memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); >>> printf("[avcodec] Frame decoding initializing\n"); >>> /*choose correct video decoder*/ >>> codec = avcodec_find_decoder(CODEC_ID_MPEG4); >>> if ( !codec ) { >>> fprintf(stderr, "[avcodec][Err] codec not found!\n"); >>> exit(1); >>> } >>> c = avcodec_alloc_context3(codec); >>> picture = avcodec_alloc_frame(); >>> if(codec->capabilities&CODEC_CAP_TRUNCATED) >>> c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete >>> frames */ >>> /* open it */ >>> if (avcodec_open2(c, codec, NULL) < 0) { >>> fprintf(stderr, "[avcodec][Err] could not open codec\n"); >>> exit(1); >>> } >>> frame = 0; >>> } >>> Thank you very much! >>> Yinxia >>> -- >>> View this message in context: >>> http://libav-users.943685.n4.nabble.com/Decoding-Problem-got-picture-always-return-0-tp4496039p4496039.html >>> Sent from the libav-users mailing list archive at Nabble.com. >>> _______________________________________________ >>> Libav-user mailing list >>> [email protected] >>> http://ffmpeg.org/mailman/listinfo/libav-user >>> >>> _______________________________________________ >>> Libav-user mailing list >>> [email protected] >>> http://ffmpeg.org/mailman/listinfo/libav-user >>> >>> >> >> _______________________________________________ >> Libav-user mailing list >> [email protected] >> http://ffmpeg.org/mailman/listinfo/libav-user >> >>
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
