ffmpeg
文章平均质量分 60
TopsLuo
朽木可雕
展开
-
ijkplayer支持播放rtsp、jpeg、gif
ijkplayer播放器支持rtsp、mpjeg播放原创 2022-06-18 13:45:06 · 2893 阅读 · 9 评论 -
手动编译android webrtc并开启h.264编解码功能
之前写过一篇“webrtc开启h.264编码功能”的博客,不过并不能成功开启h.264的解码,编码H.264是OK的,但一直没有及时纠正错误,因为当时也没找到简单直接的方法,而是通过手动修改ffmpeg目录下的BUILD.gn及其它脚本 来实现开启h.264解码的功能,相对来说太过复杂,偶然间在webrtc的讨论组里看到一篇文章,算是找到了简单的方法了,自己也按照相关的步骤执行了一遍,确实有效,所...原创 2019-09-05 16:22:26 · 1776 阅读 · 8 评论 -
avcodec_copy_context函数引发的问题
在FFmpeg库中,有一个旧的API函数:avcodec_copy_context,主要的功能就是编码参数上下文的拷贝,函数原型如下:int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);原创 2018-04-28 09:58:07 · 3016 阅读 · 0 评论 -
利用ffmpeg构造静音帧
在项目中处理音频,有时候会出现音频源没数据,但又不能中断输入音频数据给编码器,否则很有可能就出现声音与画面不同步的严重问题。所以尝试了几种构造静音帧的方法,最终找到了ffmpeg上面,废话也不多话,直接上一段代码:AVFrame *alloc_silence_frame(int channels, int samplerate, int format){ AVFrame *frame...原创 2018-05-04 09:06:50 · 5284 阅读 · 5 评论 -
ffmpeg中新的BitStreamFilter(h264_mp4toannexb、aac_adtstoasc等)的使用方法
FFMPEG转码器在封装成FLV或者MP4的时候,会用到h264_mp4toannexb、aac_adtstoasc这两个filter。老版本的bsf使用需要特别注意,一个不小心,就造成的内存泄漏,不容易察觉。 在阅读ffmpeg.3.2.2的代码过程中,发现ffmpeg使用bsf用了新的方法,所以尝试使用并总结一下。初始化并申请空间AVBSFContext *bsf_ctx;AV...原创 2018-04-25 11:04:57 · 7380 阅读 · 1 评论 -
ffmpeg命令行接收rtmp的问题
在使用ffmpeg的命令行接收rtmp流的过程中发现无法正常接收,出现如下问题:topsluo@localhost:~/workspace/ffmpeg-3.2.2$ ./ffmpeg -live 1 -i rtmp://192.168.10.230:1935/live/test test.ts ffmpeg version 3.2.2 Copyright (c) 2000-2016...原创 2018-04-03 17:40:46 · 5388 阅读 · 2 评论 -
ffmpeg输出x264的CBR流或者文件
CBR(Constant Bit Rate)是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。 这个算法也算是码率控制最难的算法了,因为无法确定何时有motion发生,假设在码率统计窗口的最后一帧发生motion,就会导致该帧size变大,从而导致统计的码率大原创 2018-01-29 16:13:14 · 4405 阅读 · 0 评论 -
不同媒体容器封装层的timebase分析
在使用ffmpeg封装过程中发现,封装成mp4文件音视频是同步的,但是封装成mpegts文件则有问题,视频播放正常,但音频播放异常,且不同步。所以猜测是封装层的时间基准单位(timebase)在搞鬼。 在此,并没有去深入的分析ffmepg中的源代码,而是简单的修改了一下ffmpeg中的av_dump_format函数,使之把音频的tbn(即封装层的timebase)也打印出来,分析了如下容器:mp原创 2017-09-14 16:12:42 · 1251 阅读 · 1 评论 -
对ffmpeg的时间戳的理解笔记
之前也有了解过ffmpeg中时间戳的相关知识点,但也仅限了解,没有更深入的理解,更没有作相关的笔记整理。近期由于工作中需要用到ffmpeg的时间戳,所以再一次去学习ffmpeg中的时间戳的知识点,并作了相关笔记,整理如下:/**Date:2017-07-28*Author:TopsLuo*Function:掌握ffmpeg中时间戳的知识点。并根据实际的时间来生成ffmpeg内部不同时间基的时间原创 2017-07-28 11:20:50 · 12615 阅读 · 0 评论 -
利用ffmpeg解码h264裸流并存储成YUV420
此处用的ffmpeg版本为3.2.2。 例子是在linux下所写的,大致流程如下:初始化ffmpeg库创建YUV文件,用于存储解码后的YUV数据初始化H264解码器给解码器的一些结构变量赋值打开解码器打开H264裸流文件读取一定数据的h264数据(因为不知道一帧到底有多大)调用ffmpeg函数,循环分析读取到的数据,每循环一次得到一帧数据,然后调用解码器解码,并存储成YUV420文原创 2017-07-04 10:18:42 · 3553 阅读 · 3 评论 -
利用FFmpeg转码生成MP4文件
项目中,需要把一路音频流及一路视频流分别转码,生成指定格式(MP4)文件。在使用ffmpeg转码生成mp4文件的过程中,碰到了不少的问题,主要如下: 1. 生成的mp4文件无法正常播放 2. 生成的mp4,用ffmpeg分析,发现码率、帧率等参数不对(编码后的pkt结构体无pts,手动赋值错误,如果是mp4文件,不考虑B帧的情况下,pts是按512往上累加,如果是ts文件,则是按3600累加原创 2017-06-24 14:42:53 · 7379 阅读 · 1 评论 -
aac转码后的数据无法直接播放
在使用ffmpeg对音频进行转码,发现从编码器里面出来的音频数据,存成的aac文件并不能用播放器(VLC)播放,goldwave也不行,原因:缺少包头信息,即ADTS头。具体这方面的资料大家可以问度娘。 编码出来的每一个AVPacket的数据,在写入到AAC文件前,都需要先写一个ADTS头(包含音频采样率信息,声道数信息,帧长度等),问题来了,如何构造一个正确的ADTS头?下面我就把简单的构造ad原创 2017-05-27 17:21:16 · 4079 阅读 · 0 评论 -
音频重采样(libavfilter)及AVAudioFifo的使用
前面有提到过,ffmpeg音频重采样有多种方法,一种是libswresample,另外一种是libavfilter,前一种方法已经介绍过,现在介绍使用libavfilter的方法,并把filter处理后的数据写入AVAudioFifo中,再从fifo中读取一帧音频数据(因为经过filter重采样的数据长度会发生变化,可能比一帧长,也可能比一帧短,具体看是上采样还是下采样了)并存储到AVFrame结构原创 2017-05-27 16:39:43 · 2975 阅读 · 3 评论 -
如何将重采样的数据扔给编码器(AVAudioFifo)
上一篇文件中写了一段重采样的测试代码,也提到过如何将resample的音频数据扔给编码器的方法,经过验证发现,该方法的确可行(我测试的音频为AAC格式,32bit,其它格式大家需要稍作改动)。首先需创建AVAudioFifo *fifo并为它申请空间:int FFmpegDecoder::InitAudioFifo(){ fifo = av_audio_fifo_alloc(AV原创 2017-05-27 14:55:06 · 1847 阅读 · 9 评论 -
利用ffmpeg中的libswresample模块对音频进行重采样
在工作中,需要对音频进行重采样,比如说采样率为44.1kHz变为48kHz,通过研究ffmpeg中提供的例子,自己写了一段测试代码,贴出来供大家参考(当然,重采样还有另外一种方法,就是用ffmpeg中的libavfilter模块,后面我也会把该方法的代码贴出来)。测试代码仅测试过AAC格式,其它格式需要稍加改动(主要在fwrite的那一段,AAC解码出来的format为FLTP类型,如果不是该格式原创 2017-05-27 14:23:59 · 2236 阅读 · 0 评论 -
ffmpeg如何为音频帧申请AVFrame
废话不多说,直接贴代码AVFrame* alloc_audio_frame(){ AVFrame *frame = av_frame_alloc(); if(frame == NULL) { av_log(NULL,AV_LOG_ERROR,"Allocate frame failed\n"); return NULL; }原创 2017-05-26 14:27:26 · 949 阅读 · 0 评论