[Libav-user] Encoding flv video by libavcodec not working
Mark Ma
gbstack08 at gmail.com
Sun Dec 1 06:54:19 CET 2013
On 2013/11/25 21:45, Mark Ma wrote:
> Hi, everyone.
> I'm trying to use libavcodec to encode a flv video. Following code is
> a sample code to generate a mpeg video, it works well. But after
> replacing the codec ID with AV_CODEC_ID_FLV1, the generated video file
> cannot be played.
>
> I opened the generated file and checked the first 4 bytes (previous
> tag size), but it's not 0. I'm curious whether converted packet is
> valid flv packet?
> Any suggestion is appreciated.
>
> (Code)
> |void simpleEncode(){
> AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO);
> AVCodecContext *ctx = avcodec_alloc_context3(codec);
> ctx->bit_rate = 400000;
> ctx->width = 352;
> ctx->height = 288;
> AVRational time_base = {1,25};
> ctx->time_base = time_base;
> ctx->gop_size = 10;
> ctx->pix_fmt = AV_PIX_FMT_YUV420P;
>
> avcodec_open2(ctx, codec, NULL);
>
> AVFrame *frame = av_frame_alloc();
> av_image_alloc(frame->data, frame->linesize, ctx->width, ctx->height, ctx->pix_fmt, 32);
> frame->format = ctx->pix_fmt;
> frame->height = ctx->height;
> frame->width = ctx->width;
>
> AVPacket pkt;
> int got_output;
> FILE *f = fopen("test.mpg", "wb");
> for(int i=0; i<25; i++){
> av_init_packet(&pkt);
> pkt.data = NULL;
> pkt.size = 0;
>
> for(int w=0; w<ctx->width; w++){
> for(int h=0; h<ctx->height; h++){
> frame->data[0][h*frame->linesize[0]+w]=i*10;
> }
> }
> for(int w=0; w<ctx->width/2; w++){
> for(int h=0; h<ctx->height/2; h++){
> frame->data[1][h*frame->linesize[1]+w]=i*10;
> frame->data[2][h*frame->linesize[2]+w]=i*10;
> }
> }
>
> frame->pts=i;
> avcodec_encode_video2(ctx, &pkt, frame, &got_output);
>
> fwrite(pkt.data, 1, pkt.size, f);
> }
> }|
Now it's solved by adding flv file header and tag header manually in the
code.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20131201/b0063ee8/attachment.html>
More information about the Libav-user
mailing list