FFMPEG的应用之demux 和decoder的分离

LoongServe论文解读:prefill/decode分离、弹性并行、零KV Cache迁移 LoongServe论文解读。介绍了prefill、decode分离的问题背景。介绍了LoongServe如何通过使ESP实例组根据负载的变化动态地scale up或者scale down并且没有KV Cache的迁移开销。 阅读详情

转载时请注明出处和作者
文章出处:http://www.nanbandao.com/bbs/
作者:Ella   

  demux和decoder的分离是指将demux出来的数据通过适配层后送给硬件decode,因为HW可以直接解码。

  这里记录一下当初遇到的问题。

       从av_read_frame出来的码流,一般来讲,已经是比较正规的ES流,通过适配层后送入解码器。所谓适配层是指该平台提供的ES解码所需要的header。

1, mp4/mkv/mov/flv封装的h.264

  mp4/mkv/mov/flv,我称之为特殊容器,因为这些容器为了减少存储,减少了一些头信息。

  这种容器封装的h.264需要判断ES流中是否包含pps和sps。如果包含,万事大吉,直接送入解码器,如果不包含,则需要进行一些处理。首先是,将sps和pps加入到ES流的前端,然后对av_read_frame出来的ES流进行处理。因为nal单元的起始码是0x000001,此时获得的ES流前4个byte是当前nal的大小,所以将ES数据正规化,然后送入解码器。

2,特殊容器的 AAC;

  由于特殊容器的AAC 不是ADTS,因此你需要加入7个bytes的ADTS的头变成ADTS。ADTS header 规范如下:

  syncword:12 bits; always: '111111111111'
  ID:             1 bits;   0: MPEG-4, 1: MPEG-2
  layer:         2 bits ; always: '00'
  protection_absent: 1 bits
  profile: 2 bits
  sampling_frequency_index: 4 bits 
  private_bit: 1 bits
  channel_configuration: 3 bits
  original/copy: 1 bits
  home: 1 bits

   copyright_identification_bit 1 bits
       copyright_identification_start 1 bits
       aac_frame_length 13 length of the frame including header (in bytes)
       adts_buffer_fullness 11 0x7FF indicates VBR
       no_raw_data_blocks_in_frame 2 bits

 


       ADTS Error check
       crc_check 16 only if protection_absent == 0
       After that come (no_raw_data_blocks_in_frame+1) raw_data_blocks.
       Some elaborations:
       profile
       bits ID == 1 (MPEG-2 profile) ID == 0 (MPEG-4 Object type)
      00 (0) Main profile AAC MAIN
      01 (1) Low Complexity profile (LC) AAC LC
      10 (2) Scalable Sample Rate profile (SSR) AAC SSR
      11 (3) (reserved) AAC LTP  

    

对于TS,m2ts,mts,由于是标准编码,因此一般由硬件直接demux、decode。

为什么大语言模型推理要分成 Prefill Decode?深入理解这两个阶段的真正意义 Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。 阅读详情

相关推荐

FFMPEG 框架分析

1 播放器包含的模块 按照DirectShow 对播放器模块的划分,一个完整的播放器应该需要包含以下五个模块: Source Filter : 数据源,可以是本地文件fopen, 也可以是网络文件,http,rtp,rtmp 等等 Demux Fliter: 解复用,下载的数据是带容器封装的,需要Demux Filter 解析头部信息,分离音频,视频流,然后送到对应的解码器。 Decoder Fliter :对音频,视频流进行解码输出。 Color Space Converter Filter :一般显示器

陌上烟雨遥的博客 830

FFMpeg example:封装解封装demux

(1)使用bitstream filter处理每个AVPacket(简单) 把每个AVPacket中的数据(data字段)经过bitstream filter“过滤”一遍。 关键函数是av_bitstream_filter_filter()。示例代码如下。 AVBitStreamFilterContext* h264bsfc = av_bitstream_filter_init("h264_mp4toannexb"); while(av_read_frame(ifmt_ctx, &pk...

fdsafwagdagadg6576的专栏 1450

ffmpeg 接受socket数据为数据源

ffmpeg写过一个自己的播放器,对ffmpeg如何打开打开文件,匹配demux,提取stream,匹配decode及渲染有一个感性的认识,目前想做一个网络接口支持多路远程摄像头的播放,起初的解决方案是dshow打开摄像头+x264编码+live555(RSTP)传输,发现编码速度太慢,达不到实时要求,于是将编码改成多线程,发现速度没什么提升(可能是拿出了问题吧)后来想起了ffmpeg(强悍的东

1101

FFmpeg应用介绍

FFmpeg应用介绍

世界那么大,我想去看看~【随心更新,看世界去了😄】 1181

FFmpeg从入门到牛掰(一):解复用(demux)讲解

转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingos 解封装示例使用到的接口 使用到的接口 /** * Open an input stream and read the header. The codecs are not opened. * The stream must be close...

impingo的博客 8480

打造高性能大模型推理平台之Prefill、Decode分离系列(一):微软新作SplitWise,通过将PD分离提高GPU的利用率哆啦不是梦

由上图可以看到PrefillDecode时延都会随着token的数量增多而增多,而(c)更可以看出在E2E(end-to-end)的时延中,TTFT(Prefill阶段)时延仅占一小部分,尤其在Conversation中可以看到,只产生129个tokens所花的时间都比处理1020个Prefill的token时间多的多。可以看到这两个阶段的特征完全不同,即便使用很好的batching技术,也无法解决两个如此明显不同阶段所带来的问题,比如:由于硬件资源利用不足,使得为用户提供服务将产生更高的花费。

qq_32204441的博客 3万+

ffmpegdemux

今天学习解析媒体文件。 写了一个用例,解析MP4文件得到视频帧音频帧,并分别保存到不同的文件。 照惯例,先学习,再代码。 学习 av_register_all /** * 初始化 libavformat,并且注册所有的合并器、解析器协议。 * 如果你不调用这个方法,你可以明确地选择你想要程序支持的格式。 * 参照 av_register_input_format() ...

Hi, Boy 4381

FFMPEG处理音频时间戳的主要逻辑

FFMPEG处理音频时间戳的主要逻辑是: 1. demux读取AVPacket。以输入flv为例,timebase是1/1000,第一个音频包可能是46,代表0.046秒。 2. decoder解码AVPacket为AVFrame,frame的pts为NOPTS,需要设置,否则后面都会有问题。主要是调用:av_rescale_delta: AVRational in_tb = decod

OSSRS 7592

FFmpeg入门详解之114:DirectShow读取摄像头数据

DirectShow GraphEdit(graphedt.exe)来进行分析:在上图中可以直观的看到播放这个媒体文件的基本模块,七个模块按广度顺序:读文件模块, 解复用模块, 视频解码模块, 音频解码音频, 颜色空间转换模块,视频显示模块,音频播放模块。按照DirectShow的称呼, 一个模块叫做一个filter(过滤器),模块的输入输出口叫做pin(管脚), 有input pin output pin两种;

福优学苑@音视频+流媒体 1859

ffmpegdemux 解复用

今天学习解析媒体文件。 写了一个用例,解析MP4文件得到视频帧音频帧,并分别保存到不同的文件。 照惯例,先学习,再代码。 学习 av_register_all [cpp] view plain copy /**  * 初始化 libavformat,并且注册所有的合并器、解析器协议。  * 如果你不调用这个方法,你可以明确地选择你想要程序支持的

小伙儿在这儿烤地瓜 1592

ffmpeg 与 aac 文件解码

本文介绍了使用FFmpeg解码AAC音频文件的相关对象流程。主要内容包括: AAC文件对应的demuxer对象ff_aac_demuxer,属于AVInputFormat类型,负责探测AAC格式、读取文件头音频包。 AAC文件对应的parser对象ff_aac_parser,属于AVCodecParser类型,用于解析AAC音频数据帧。 介绍了如何通过FFmpeg提供的接口访问这些对象,包括av_find_input_format()查找demuxerav_parser_init()初始化parser

hjjdebug的专栏 853

FFMPEG源码分析】从ffplay源码摸清ffmpeg框架(一)

ffplay主框架分析

猿来如此yXy 782

FFmpeg笔记

文章目录第四部分 FFmpegffmpeg的组成结构环境部署shared版exe程序的使用常见使用命令参数dev版ffmpeg播放视频的流程常用API(根据原官方文档做了个性化翻译,具体以官方文档为准)av_register_all 注册所有组件打开关闭视频寻找流信息,获取帧信息缩放视频avcodec_find_decoder 找到解码器avcodec_open2 打开解码器av_read_...

yangOvOyang 406

ffmpeg 问答系列->关于音频的思考

本文探讨了FFmpeg中音频处理的核心概念。音频帧(frame)对应AVFrame中的nb_samples变量,不同编码格式采样点数不同(如AAC为1024,MP3为1152)。原始音频(如PCM)虽不需编解码,但仍会分配AVCodecID以标识格式,其对应关系通过demuxer对象的raw_codec_id建立。测试发现,原始音频也对应decoder对象(如pcm_u8),该对象在libavcodec/pcm.c中定义。这些机制确保了FFmpeg能统一处理各类音频数据。

hjjdebug的专栏 1206

ffmpeg 解码视频小例子

原:http://blog.csdn.net/flyfight88/article/details/8541068 ffmpeg是编解码的利器,用了很久,以前看过dranger 的教程,非常精彩,受益颇多,是学习ffmpeg api很好的材料。可惜的是其针对的ffmpeg版本已经比较老了,而ffmpeg的更新又很快,有些API已经完全换掉了,导致dranger教程中的 代码已经无法编译,

wonder 1万+

ffmpeg实现通用的解码类

ffmpeg API实现通用解码类

fantasy_ARM9的博客 573
下一篇: FFMPEG中INPUT和DEMUX分家
echoheng
博客等级 码龄19年 3粉丝 2原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值