首页 > 编程语言 >FFmpeg flv_write_header 源码剖析

FFmpeg flv_write_header 源码剖析

时间:2023-12-22 14:32:58浏览次数:41  
标签:write FFmpeg avio FLV pb 源码 flv 字节

libavformat\flvenc.c

static int flv_write_header(AVFormatContext *s)
{
    int i;
    AVIOContext *pb = s->pb;
    FLVContext *flv = s->priv_data;

    //FLV 文件的前3个字节为固定的‘F’‘L’‘V’,用来标识这个文件是FLV格式
    avio_write(pb, "FLV", 3);
    //第4个字节表示flv版本号.当前版本号为1
    avio_w8(pb, 1);
    //第5个字节中的第0位和第2位,分别表示 video 与 audio 存在的情况.(1表示存在,0表示不存在)
    avio_w8(pb, FLV_HEADER_FLAG_HASAUDIO * !!flv->audio_par +
                FLV_HEADER_FLAG_HASVIDEO * !!flv->video_par);
    //接下来四个字节是FLV头长度,版本1的值固定为9,到这里FLV头写入结束
    avio_wb32(pb, 9);
    //这里是上一个Tag的长度,对于FLV头来说,9个字节是不包含Tag的,因此长度是0
    avio_wb32(pb, 0);

    for (i = 0; i < s->nb_streams; i++)
        if (s->streams[i]->codecpar->codec_tag == 5) {
            avio_w8(pb, 8);     // message type
            avio_wb24(pb, 0);   // include flags
            avio_wb24(pb, 0);   // time stamp
            avio_wb32(pb, 0);   // reserved
            avio_wb32(pb, 11);  // size
            flv->reserved = 5;
        }

    if (flv->flags & FLV_NO_METADATA) {
        pb->seekable = 0;
    } else {
        write_metadata(s, 0);
    }

    for (i = 0; i < s->nb_streams; i++) {
        flv_write_codec_header(s, s->streams[i]->codecpar, 0);
    }

    flv->datastart_offset = avio_tell(pb);
    return 0;
}

标签:write,FFmpeg,avio,FLV,pb,源码,flv,字节
From: https://blog.51cto.com/fengyuzaitu/8935221

相关文章

  • 项目里出现两个配置类继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析
    为什么我们的项目里出现两个配置类继承WebMvcConfigurationSupport时,只有一个会生效。我在网上找了半天都是说结果的,没有人分析源码到底是为啥,博主准备讲解一下,希望可以帮到大家!大家基本遇到过一种情况,就是我配置类中已经配置了,为什么就是没有生效呢?其中一种原因就是,自己写的......
  • Spring MVC 源码分析 - HandlerMapping 组件(二)之 HandlerInterceptor 拦截器
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • llama的hf源码结构
    上一个博客我们看了rope.那么llama的hidden_states就没啥难点了.再整体把握一下hf里面llama的代码结构.文件是:D:\Users\admin\miniconda3\Lib\site-packages\transformers\models\llama\modeling_llama.py基座:classLlamaModel(LlamaPreTrainedModel):这个模型输入bs,se......
  • 数字化医学影像系统源码,采用C语言开发,支持MPR、CPR、MIP、SSD、VR、VE三维图像处理
    PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以数字化的方式将各种医学影像,如核磁共振、CT扫描、超声波等保存起来,并在需要时能够快速调取和使用。PACS系统还提供了辅助诊断和管理功能,可以在不同的影像设备......
  • llama的rope源码阅读
    关键代码的理解:classLlamaRMSNorm(nn.Module):def__init__(self,hidden_size,eps=1e-6):"""LlamaRMSNormisequivalenttoT5LayerNorm"""super().__init__()self.weight=nn.Parameter(to......
  • 开发医疗陪诊系统源码:搭建安全高效的医患互动平台
    本文将深入探讨开发医疗陪诊系统的源码,以及如何搭建一个安全高效的医患互动平台。一、引言医疗陪诊系统旨在通过技术手段,缩短患者与医生之间的距离,提供更快速、便捷的医疗服务。二、技术选型2.1前端技术在搭建医疗陪诊系统的前端时,我们可以选择使用现代化的前端框架,如Vue.js或React......
  • HydroOJ 从入门到入土(9)源码简易修改记录——卍解!
    随着OJ的使用越来越深入,本强迫症总会觉得一些细节有时候不那么符合自己的习惯,但是想改又无处下手,最终还是走上了修改源码的邪路.目录0.重要1.超级管理员查看自测代码2.超级管理员隐身查看比赛/作业题目3.超级管理员隐身查看比赛题目列表4.关掉客观题的多选题部......
  • centos7上源码安装postgresql 13.6
    1环境描述操作系统:Centos7.6postgresql:13.6安装方式:源码安装2创建用户#groupadd-g2000pgsql#useradd-u2000-gpgsqlpgsql3目录规划#mkdir-p/postgresql/{pgdata,archive,scripts,backup,pg13,soft,pg_log}#chown-Rpgsql:pgsql/postgresql#......
  • 智慧医疗APP开发指南:医疗陪诊系统源码实战
    本文将深入探讨智慧医疗APP开发中的医疗陪诊系统,重点介绍实际应用中的源码实战经验。 一、技术选型在开发医疗陪诊系统时,合理的技术选型是确保系统高效运行的关键。可以选择采用前后端分离的架构,使用Vue.js作为前端框架,SpringBoot作为后端框架,通过RESTfulAPI进行通信。二、实战经......
  • iTOP-RK3588开发板使用FFMpeg进行推流
    Debian/Ubuntu系统使用以下命令安装FFMpeg,如下图所示:apt-getinstallffmpeg使用ifconfig查看开发板ip为192.168.1.245如下图所示:使用FFMpeg推流一个mp4视频进行测试,作者将测试视频test.mp4放在了根目录下,可根据实际目录修改以下命令,如下图所示:ffmpeg-re-stream_l......