ffmpeg 封装mp4 踩坑记录

本文详细介绍了使用FFmpeg进行H264视频编码时所需设置的关键参数,包括视频上下文设置、时间基准定义及关键帧标记等,确保了编码文件能在Windows Media Player中正确播放并支持封面显示和拖拽播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为是直接从裸流写出,需要对

p_outContex->flags |= CODEC_FLAG_GLOBAL_HEADER;


            p_outContex->extradata_size = sps.size(); //缺少将导致win player无法播放 
            p_outContex->extradata = (unsigned char*)av_malloc(sps.size());
            memcpy(p_outContex->extradata, &sps[0], sps.size());
             
        p_outContex->width = w;
        p_outContex->height = h;

        p_outContex->codec_id= AV_CODEC_ID_H264;
        p_outContex->codec_type = AVMEDIA_TYPE_VIDEO;
        p_outContex->pix_fmt = AV_PIX_FMT_YUV420P;

        out_stream->codecpar->bit_rate = 400000;
        out_stream->time_base.den = 90000;
        out_stream->time_base.num = 1;

这几项完整赋值

在写入pack时对

    p_pkt.data = (BYTE*)pData;
        p_pkt.size = size;    
        if (keyframe)
        {
            p_pkt.flags = AV_PKT_FLAG_KEY;//缺少将导致无封面,无分块(stco 空节),无法拖动
        }

        p_pkt.duration = p_st;//持续时间
        p_pkt.pts = m_vTime;//显示时间
        p_pkt.dts = p_pkt.pts;//解码时间
        p_pkt.pos = -1;
        p_pkt.stream_index = m_videoindex_out;

完整赋值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值