
ffmpeg
文章平均质量分 64
huabiaochen
you smile i smile
展开
-
FFmpeg简单使用:解封装h264 ---- 提取SPS PPS
2_bit: 数据长度-1:avcc格式是extradata | [length] [nalu] | [length][nalu],这里length所占的字节数就是3(11)+ 1 = 4。0x28: avc level (首个SPS的第3个字节,可以发现后面0x0989位置的3个字,和这3个是一样的)0x67: [0110 0111] nalu_type为7,表示SPS,就是说从0988到099f这24个数据为sps。5_bit: 接下来的sps或pps的个数::这里为1。3_bit: 默认 111。原创 2022-12-27 14:22:40 · 1502 阅读 · 0 评论 -
FFmpeg简单使用:过滤器 ---- h264_mp4toannexb
表示存在多个nalu。我们可以看到,下一个并不是简单变为00 00 00 01,而是插入了一个nalu,再下一个nalu(f885位置),才是之前的nalu。AVPacket中的data格式是:size(4个字节)+ nalu + size(4个字节)+ nalu,一个packet可能会存在多个nalu,前面size表示nalu的大小(不包含自身)4字节类型的开始码在在连续的数据传输中非常有用,因为用字节来对齐、分割流数据,比如:用连续的31个bit0后接一个bit1来分割流数据,是很容易的。原创 2022-12-27 14:20:12 · 2453 阅读 · 0 评论 -
FFmpeg简单使用:过滤器 ---- 视频过滤2
⼀个filter可以有多个输⼊和多个输出,没有输⼊的filter称为source filter,没有输出的filter称为sink filter。例如,scale filter 的前两个选项分别是w和h,当参数列表为“iw/2:ih/2”时,iw/2的值赋给w,ih/2的值赋给h。它由两个filter组成,crop和vflip,crop的输⼊ 为[tmp],vflip的输出标识为[flip]。2. 每个filter都连接到序列中的前⼀个filter,即前⼀个filter的输出是后⼀个filter的输⼊。原创 2022-12-27 14:15:42 · 1029 阅读 · 0 评论 -
FFmpeg简单使用:过滤器 ---- 视频过滤
这个例⼦的处理流程如上所示,⾸先使⽤split滤波器将input流分成两路流(main和tmp),然后分别对两路流进⾏处理。对于tmp流,先经过crop滤波器进⾏裁剪处理,再经过flip滤波器进⾏垂直⽅向上的翻转操作,输出的结果命名为flip流。再将main流和flip流输⼊到overlay滤波器进⾏合成操作。上图的input就是上⾯提过的buffer源滤波器,output就是上⾯的提过的buffersink滤波器。所有这些信息都统⼀由AVFilterGraph来管理。原创 2022-12-27 14:12:46 · 413 阅读 · 0 评论 -
FFmpeg简单使用:视频编码 ---- YUV转H264
tune是x264中重要性仅次于preset的选项,它是视觉优化的参数,tune可以理解为视频偏好(或者视频类型),tune不是⼀个单⼀的参数,⽽是由⼀组参数构成-tune来改变参数设置。⼀个编码速度稍慢的预设会提供更⾼的压缩效率(压缩效率是以⽂件⼤⼩来衡量的)。这就是说,假如你想得到⼀个指定⼤⼩的⽂件或者采⽤恒定⽐特率编码模式,你可以采⽤⼀个较慢的预设来获得更好的质量。从本地读取YUV数据编码为h264格式的数据,然后再存⼊到本地,编码后的数据有带startcode。获取到编码后的AVPacket数据。原创 2022-12-27 14:07:40 · 4319 阅读 · 1 评论 -
FFmpeg简单使用:音频编码 ---- pcm转aac
【代码】FFmpeg简单使用:音频编码 ---- pcm转aac。原创 2022-12-27 14:03:34 · 1542 阅读 · 0 评论 -
FFmpeg简单使用:视频解码 ---- 提取yuv
【代码】FFmpeg简单使用:视频解码 ---- 提取yuv。原创 2022-12-27 13:57:55 · 1344 阅读 · 0 评论 -
FFmpeg简单使用:音频解码 ---- 提取pcm
【代码】FFmpeg简单使用:音频解码 ---- 提取pcm。原创 2022-12-27 13:55:48 · 1110 阅读 · 0 评论 -
FFmpeg简单使用:解封装 ---- 提取aac
【代码】FFmpeg简单使用:解封装 ---- 提取aac。原创 2022-12-27 13:46:00 · 965 阅读 · 0 评论 -
FFmpeg简单使用:解封装 ---- 基本流程
3.读取媒体的部分数据包以获取码流信息avformat_find_stream_info。4.2 定位文件avformat_seek_file或av_seek_frame。2.根据url打开本地文件或网络流avformat_open_input。1.分配解复用器上下文avformat_alloc_context。4.1 从文件中读取数据包av_read_frame。5.关闭解复用器avformat_close_input。4.读取码流信息:循环处理。原创 2022-12-27 13:41:14 · 573 阅读 · 0 评论 -
ffmpeg解封装mov
最近在研究ffmpeg,发现网上关于ffmpeg解封装的源码分析不多而且不全,所以这里总结一下,我自己对ffmpeg解封装mov、mp4格式的源码分析主要就是关于mov.c的源码分析,让各位同学了解一下,mp4的流AVStream、AVPacket是如何赋值的,这两个结构体变量会是解码的输入数据,了解解封装过程,如pts、dts是如何得到的,有助于ffmpeg的二次开发。关于MP4协议,网上有详细的描述,我这里就不在写了,直接上干货,代码书注释。所有接口和数据结构写的都很详细,但是研究了好一阵,写起来超转载 2021-11-09 10:24:50 · 929 阅读 · 0 评论 -
FFmpeg的MOV封装解析
目录参考 概述 mov_read_header mov_read_packet mov_read_seek mov_read_close1. 参考[1] github.com/FFmpeg/FFmpeg/blob/master/libavformat/mov.c [2] wangcong02345/ffmpeg源码分析--11.mov的mov_read_header [3] wangcong02345/ffmpeg源码分析--12.mov的mov_read_packet [4]..原创 2021-11-08 19:18:29 · 3681 阅读 · 0 评论 -
ffmpeg AVPacket结构体及其相关函数
目录0. 简介 1. AVPacket数据结构定义 2. AVPacket相关函数正文回到顶部0. 简介AVPacket结构体并不是很复杂, 但是在ffmpeg中用的非常多. 与其相关的函数也是比较多.AVPacket保存了解复用之后, 解码之前的数据, 和这些数据相关的一些附加信息.对于视频来说, AVPacket通常包含一个压缩的frame; 而音频可能包含多个压缩的frame. 一个packet也可能是空的, 不包含任何压缩数据data, 而只包含附加数据side .原创 2021-10-22 14:51:48 · 280 阅读 · 0 评论 -
SRT、RTMP、NDI视频传输协议对比
一、SRT和NDI两种低延时传输协议的比较关于SRT:SRT是由Haivision和Wowza共同创建的互联网传输协议,是时下非常受欢迎的开源低延迟视频传输协议。使用SRT传输技术,能够成功实现普通互联网环境下、多地之间、安全可靠的高清视频传输与分发。关于NDI:NDI是NewTek公司于2015年推出的网络设备接口协议,是一种基于局域网络的信号传输协议。使用NDI传输技术,在局域网内的一个设备可以通过一条网线输出或者接收多个NDI信号,可完全取代传统SDI/HDMI视频线传输,它让视频在I原创 2021-09-14 10:05:08 · 2696 阅读 · 0 评论 -
AAC音频ADTS结构
ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。ADTS内容及结构一般情况下ADTS的头信息都是7个字节,分为2部分:adts_fixed_header();adts_variable_header();原创 2021-09-10 16:59:22 · 304 阅读 · 0 评论 -
ffmpeg音频采集、编码
音频采集在windows上获取音频的方法,主要尝试了2种,效果差不多。一种是通过ffmpeg的dshow获取,另一种是直接从windows的Core Audio API 来获取。通过这两种方式采集到的音频的采样率都是当前声音播放的扬声器的采样率。ffmpeg dshow 采集使用dshow抓屏需要安装抓屏软件:screen-capture-recorder。在命令行用dshow:ffmpeg -f dshow -i video="screen-capture-recorder" -f原创 2021-09-08 17:24:26 · 1930 阅读 · 0 评论 -
ffmpeg time_base 理解
ffmpeg time_baseffmpeg存在多个时间基准(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。一、time_base1、AVStream(libavformat/avformat.h)typedef struct AVStream { /** * This is the fundamental u原创 2021-04-21 15:46:20 · 657 阅读 · 2 评论 -
ffmpeg 发布hls流
主要讲述如何利用ffmpeg将输入视频流通过转码的方式转成m3u8文件。如何通过http的方法将切边推送给客户端,不在本文中讲述。输入视频流可以是rtsp流,也可以是http,还可以是文件等等。转码的基本流程如下图所示: 图1. 生产hls视频流视频流解复用可以获得packet,对应的实现方法是av_read_frame。下面给出代码: 1.初始化ffmpegvoid ...原创 2021-04-08 13:29:17 · 1017 阅读 · 0 评论 -
avformat_open_input阻塞问题解决
avformat_open_input默认是阻塞操作,如果不加控制,等待时间可能会达到30s以上,对于有些情况,等待30s的体验是无法接受的。ffmpeg支持interrupt_callback机制,可以对输入(或输出)的AVFormatContext的interrupt_callback成员设置,然后再回调函数中做控制。// 回调函数的参数,用了时间typedef struct { time_t lasttime;} Runner;// 回调函数static int interrup原创 2021-03-03 19:36:21 · 5379 阅读 · 3 评论