
音视频专栏
音视频专栏
我是路人乙1
暂不添加
展开
-
关于avformat_open_input 返回 -1094995529
在学习ffmpeg的过程中,真的是踩了不少的坑,可能是我使用的最新的版本缘故,也可能是个人经验不足导致的。比如这次: 在学习将pcm格式音频编码成aac音频时,出现了一个莫名其妙的问题,在网上怎么查阅资料方法都解决不了:avformat_open_input在打开pcm文件时发生错误返回: -1094995529。方法:需要faac压缩后的aac 放入packet才能打开...原创 2021-11-15 14:03:13 · 4940 阅读 · 4 评论 -
ffmpeg推流时与服务器断开后的自动重连功能的实现
当我们使用ffmpeg进行视频推流的时候,流媒体服务器与推流终端一直连接的时候,推流是成功的,但是如果服务器重启,就会出现推流一直失败的问题,av_interleaved_write_frame返回值-32,根据ffmpeg对返回值的解释:-32:管道阻塞:这个一般是socket错误,推流的服务器断开了socket链接,导致发送失败。推流程序如果没有断开重连功能的话,就只能关掉程序,重新启动来重新连接服务器解决问题,但这显然不是解决问题的办法,我们期望的办法是程序能够在推流失败后能够自动重连服务器,转载 2021-11-15 14:01:15 · 5790 阅读 · 0 评论 -
H264理解
H264是以高压缩和高质量的多媒体图像著称,我的理解是,有时候一段时间内,几副图像之间的差别不大,没有必要去完成描述每一副图像,比如说第一张图像,但第二张图像与第一张图像差别不大,就不需要完整记录第二张图像,只需要记录两者差异即可,同理依次类推。这样就形成了一个序列。当发现某一张图像与前面的差别很大时,则结束上一个序列。则再重新新建一个序列。一个序列是以I帧(也叫做IDR)开始,到下一个I帧之前。也就是序列记录的是差别不大的一组图片。那什么是I帧,P帧,B帧呢?I帧:也就是完整的帧,没有丢掉信息原创 2021-10-29 10:00:51 · 286 阅读 · 0 评论 -
srs源码分析(一)
由于工作中的需要,需要用到srs流媒体服务器,所以在此做个了解。源码下载地址:https://github.com/ossrs/srs先来看看整体流程架构,图片来自https://blog.youkuaiyun.com/adkada1/article/details/120583331原创 2021-10-26 11:27:34 · 697 阅读 · 1 评论 -
avformat_open_input
avformat_open_input:用于打开多媒体数据,并且获取一些信息。int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options){ AVFormatContext *s = *ps; int i, ret = 0; AVDictionary *tmp = NU原创 2021-10-26 10:11:22 · 1023 阅读 · 0 评论 -
avio_alloc_context
avio_alloc_context:从内存中进行读取或者输出到内存。源码如下:int ffio_init_context(AVIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_..原创 2021-10-25 10:30:33 · 3263 阅读 · 0 评论 -
av_register_all和avformat_alloc_context
'av_register_all': 被声明为已否决其实就是av_register_all()这个方法在FFMPEG 4.0以后将不再推荐使用,而且是非必需的,因此直接注释掉即可。avformat_alloc_context:用来申请AVFormatContext类型变量并初始化默认参数。通过avformat_free_context(AVFormatContext *s)来进行释放。源码:static void avformat_get_context_defaults(AVFormatCo原创 2021-10-25 10:14:39 · 1720 阅读 · 0 评论 -
AVFormatContext
AVFormatContext是描述媒体文件或者媒体流的构成和基本信息typedef struct AVFormatContext{ /** * A class for logging and @ref avoptions. Set by avformat_alloc_context(). * Exports (de)muxer private options if they exist. */ const AVClass *av_class;//用于记录原创 2021-10-18 09:11:32 · 1331 阅读 · 0 评论 -
FFmpeg avcodec_open2不成功broken ffmpeg default settings detected跟H264的设置有关
使用ffmpeg x264进行编码的时候,avcodec_open报错:[libx264 @ 00021bb0]broken ffmpeg default settings detected[libx264 @ 00021bb0]use an encoding preset (vpre)解决方法:在 x264 的source file encoder/encoder.c 中找到该报错的地方/* Detect default ffmpeg settings and terminate with an转载 2021-09-26 17:42:38 · 1446 阅读 · 0 评论 -
ffmpeg 编译问题集锦
ffmpeg 编译问题集锦1、matroskadec.c:843: undefined reference to ‘ff_log2_tab’原因:ff_log2_tab变量定义在log2_tab.c文件中,libavformat模块有引用到,需要包含处理:在libavformat/matroskadec.c文件开头加上 ==》 #include “libavutil/log2_tab.c”2、asvdec.c:74: undefined reference to ‘ff_reverse’原因:转载 2021-09-26 15:10:48 · 686 阅读 · 0 评论 -
Video codec hevc not compatible with flv
你的mp4文件使用的视频格式是 hevc h265, 这个太新了,由于flv 已经不更新了,所以不能在 flv文件中写入 hevc格式的视频。你转成 flv文件之所以可以推流是因为在转格式的时候 视频格式也发生了变化,就成了flv可以支持的视频格式,所以才能推流成功。解决办法:修改ffmpeg源码中的flv.h,flvdec.c,flvenc.c这三个文件重新编译。链接如下:https://download.youkuaiyun.com/download/qq_34062754/24883522...原创 2021-09-26 14:57:35 · 9166 阅读 · 0 评论 -
av_bitstream_filter_init
分离某些封装格式(例如MP4/FLV/MKV的时候)中的h264的时候,首先要写入SPS和PPS,否则会导致分离出来的数据没有SPS和PPS而无法进行播放。需要使用FFmpeg中的名称为"h264_mp4toannexb"的BitStreamFilter进行处理。老版本://声明AVBitStreamFilterContext* h264bsfc=av_bitstream_filter_init("h264_mp4toannexb");//使用av_bitstream_filter_filt原创 2021-09-22 10:02:19 · 522 阅读 · 0 评论 -
av_bitstream_filter_init
作用:分离某些封装格式的H264的时候,首先需要写入SPS和PPS,否则导致分离出来的数据没有SPS和PPS,而无法播放。处理方式:1、使用bitstream filter处理每个AVPacket包 先声明,再使用,最后关闭 AVBitStreamFilterContext *h264bsfc=av_bitstream_filter_init("av_bitstream_filter_filter"); 使用 av_bitstream_filter_f...原创 2021-08-20 09:51:53 · 1279 阅读 · 0 评论 -
ffmpeg基础(五) I帧B帧P帧
I帧:关键帧,属于帧内压缩,你可以理解为这一画面的完整保留。解码的时候只需要本帧的数据就可以完成,因为它包含的是完整信息。P帧:属于帧间压缩,表示这一帧与前面的一关键帧(或者P帧)的差别,解码前需要用缓存的画面叠加本帧定义的差别,生成最终画面。B帧:属于帧间压缩,表示双向差别帧,记录的是本帧与前后帧的差别。...原创 2020-12-21 13:56:36 · 2973 阅读 · 0 评论 -
ffmpeg基础(四) 解码视频
解码流程图:直接上代码,里面有每一步的解释void CTestYUV::decode(){ /* av_register_all初始化所有组件,只有调用了该函数才能使用复用器和解码器。 */ av_register_all(); avformat_network_init(); //AVFormatContext设备上下文 /* */ AVFormatContext* pFormatContext = NULL; const char* path = "D://1..原创 2020-12-17 13:22:11 · 1022 阅读 · 0 评论 -
ffmpeg基础(三) 打开本地文件和网络文件
重要的结构体:AVFormatContext:这个结构描述了媒体信息和媒体流的基本信息,是FFMpeg最基本的数据结构,是一个多媒体文件或流的根本抽象。主要成员其中主要的成员: struct AVInputFormat *iformat:输入文件的格式。 AVIOContext *pb:IO上下文结构体,这个以后详细介绍。 unsigned int nb_streams:文件中流的数量。(比如值为2,一个音频流,一个视频流) AVStre...原创 2020-12-16 16:54:06 · 807 阅读 · 0 评论 -
ffmpeg基础(二) YUV图像格式
目录前言一、YUV的采样方式二、存储格式1.X代表Y分量 0代表U/V分量420的常规打包格式如下 总结前言YUV是欧洲电视采用的一种编码方法,Y表示明亮度,U表示色度,V表示浓度。在现代彩色系统中,通过采用三管彩色摄像机或者彩色CCD进行取像,然后把取来的彩色信号经过分色,放大矫正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV...原创 2020-12-14 13:38:52 · 530 阅读 · 0 评论 -
ffmpeg基础(一) 基本组成
前言一、FFmpeg的组成部分FFmpeg包含五个组成部分:1、AVFormat: 这个模块中实现了多媒体领域中绝大多数媒体格式的封装和解封装,比如MP4,FLV等文件封装格式。2、AVCodec: 和AVFormat类似,这个模块实现了绝大多数多个媒体格式的编码和解编码格式,既支持编码也支持界面。比如H.264编码,H.265编码3、AVFilter: 提供了音视频字幕滤镜处理框架。例如: 先将输入拆分成两份,一路保持原样,另...原创 2020-12-11 13:16:32 · 329 阅读 · 0 评论