![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编码
文章平均质量分 63
TopsLuo
朽木可雕
展开
-
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 · 931 阅读 · 0 评论 -
手动编译android webrtc并开启h.264编解码功能
之前写过一篇“webrtc开启h.264编码功能”的博客,不过并不能成功开启h.264的解码,编码H.264是OK的,但一直没有及时纠正错误,因为当时也没找到简单直接的方法,而是通过手动修改ffmpeg目录下的BUILD.gn及其它脚本 来实现开启h.264解码的功能,相对来说太过复杂,偶然间在webrtc的讨论组里看到一篇文章,算是找到了简单的方法了,自己也按照相关的步骤执行了一遍,确实有效,所...原创 2019-09-05 16:22:26 · 1752 阅读 · 8 评论 -
webrtc开启h.264编解码功能
https://groups.google.com/a/chromium.org/forum/#!topic/chromium-reviews/YoMQmOBPZn8自己编译的webrtc库发现无法正常使用h.264编解码器,所以猜测可能是在编译的过程中默认没有开启h.264功能。首先,我们应该查询一下gn编译的时候是否可以选择h.264。查看gn编译的可选参数命令行为:#查看帮助gn h...原创 2019-03-04 14:59:21 · 2698 阅读 · 4 评论 -
C++实现base64编解码
将昨天的php代码改造成C++/*base_64.h文件*/#ifndef BASE_64_H#define BASE_64_H/** * Base64 编码/解码 * @author liruixing */class Base64{private: std::string _base64_table; static const char base64_pad ...转载 2018-10-17 11:20:37 · 1236 阅读 · 1 评论 -
avcodec_copy_context函数引发的问题
在FFmpeg库中,有一个旧的API函数:avcodec_copy_context,主要的功能就是编码参数上下文的拷贝,函数原型如下:int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);原创 2018-04-28 09:58:07 · 3000 阅读 · 0 评论 -
利用ffmpeg构造静音帧
在项目中处理音频,有时候会出现音频源没数据,但又不能中断输入音频数据给编码器,否则很有可能就出现声音与画面不同步的严重问题。所以尝试了几种构造静音帧的方法,最终找到了ffmpeg上面,废话也不多话,直接上一段代码:AVFrame *alloc_silence_frame(int channels, int samplerate, int format){ AVFrame *frame...原创 2018-05-04 09:06:50 · 5201 阅读 · 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 · 7300 阅读 · 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 · 5106 阅读 · 2 评论 -
spf13高亮显示问题
spf13高亮显示问题问题描述在编辑已有的1.cpp文件的时候,发现该文件中的语法无高亮显示。如果复制成另外一个文件(比如cp 1.cpp 2.cpp),此时打开2.cpp的时候,语法的高亮显示正常。问题补充,之前是由于存在1.cpp.swap,所以在打开1.cpp的时候,我选择了Del,之后就出现了上述问题!问题猜测由于复制成其它文件,语法高亮正常,说明不是文件的问题...原创 2018-03-03 17:08:07 · 1279 阅读 · 0 评论 -
ffmpeg输出x264的CBR流或者文件
CBR(Constant Bit Rate)是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。 这个算法也算是码率控制最难的算法了,因为无法确定何时有motion发生,假设在码率统计窗口的最后一帧发生motion,就会导致该帧size变大,从而导致统计的码率大原创 2018-01-29 16:13:14 · 4363 阅读 · 0 评论 -
不同媒体容器封装层的timebase分析
在使用ffmpeg封装过程中发现,封装成mp4文件音视频是同步的,但是封装成mpegts文件则有问题,视频播放正常,但音频播放异常,且不同步。所以猜测是封装层的时间基准单位(timebase)在搞鬼。 在此,并没有去深入的分析ffmepg中的源代码,而是简单的修改了一下ffmpeg中的av_dump_format函数,使之把音频的tbn(即封装层的timebase)也打印出来,分析了如下容器:mp原创 2017-09-14 16:12:42 · 1224 阅读 · 1 评论 -
利用FFmpeg转码生成MP4文件
项目中,需要把一路音频流及一路视频流分别转码,生成指定格式(MP4)文件。在使用ffmpeg转码生成mp4文件的过程中,碰到了不少的问题,主要如下: 1. 生成的mp4文件无法正常播放 2. 生成的mp4,用ffmpeg分析,发现码率、帧率等参数不对(编码后的pkt结构体无pts,手动赋值错误,如果是mp4文件,不考虑B帧的情况下,pts是按512往上累加,如果是ts文件,则是按3600累加原创 2017-06-24 14:42:53 · 7318 阅读 · 1 评论 -
aac转码后的数据无法直接播放
在使用ffmpeg对音频进行转码,发现从编码器里面出来的音频数据,存成的aac文件并不能用播放器(VLC)播放,goldwave也不行,原因:缺少包头信息,即ADTS头。具体这方面的资料大家可以问度娘。 编码出来的每一个AVPacket的数据,在写入到AAC文件前,都需要先写一个ADTS头(包含音频采样率信息,声道数信息,帧长度等),问题来了,如何构造一个正确的ADTS头?下面我就把简单的构造ad原创 2017-05-27 17:21:16 · 4034 阅读 · 0 评论 -
如何将重采样的数据扔给编码器(AVAudioFifo)
上一篇文件中写了一段重采样的测试代码,也提到过如何将resample的音频数据扔给编码器的方法,经过验证发现,该方法的确可行(我测试的音频为AAC格式,32bit,其它格式大家需要稍作改动)。首先需创建AVAudioFifo *fifo并为它申请空间:int FFmpegDecoder::InitAudioFifo(){ fifo = av_audio_fifo_alloc(AV原创 2017-05-27 14:55:06 · 1806 阅读 · 9 评论 -
webrtc android native如何开启硬件加速
在android平台中开发webrtc相关项目,可以直接使用webrtc提供的java SDK。当然,也可以选择native的方式来实现。后者相对前者来说,不容易被反编译。所以我们选择的后者的开发方式。要实现硬件加速后,在我脑海中出现了两种方案:方案一. 通过ffmpeg来实现硬件加速方案二. 通过webrtc SDK来实现硬件加速方案一调研:如果想要实现硬件加速,理论上来说,直接开启f...原创 2019-09-05 16:56:48 · 1177 阅读 · 1 评论