随笔分类 -  音视频开发

摘要:PCM数据格式: 如果数据是 float 格式,则值域为 [-1.0, 1.0] 如果数据是 S16 (int16) 格式,则值域为 [-32767, +32767] #include <stdint.h> inline int16_t PCMFloat32ToInt16FmtConvert(flo 阅读全文
posted @ 2023-02-06 15:37 小超不挑食 阅读(485) 评论(0) 推荐(0)
摘要:一、输出mp3文件 支持格式: AV_SAMPLE_FMT_U8P AV_SAMPLE_FMT_S16P AV_SAMPLE_FMT_S32P AV_SAMPLE_FMT_S64P 二、输出mp4文件 支持音频格式(aac编码) AV_SAMPLE_FMT_FLTP 支持视频格式(x264编码) s 阅读全文
posted @ 2022-11-02 11:10 小超不挑食 阅读(100) 评论(0) 推荐(0)
摘要:一、问题描述 ffmpeg mux输出音视频文件时(如mp3),在加入视频流时设置time_base = 1/30, 但当调用 avformat_write_header() 之后,time_base 被修改为 1/15360 ,如下面两图所示: 调用函数之前: 调用函数之后: 二、问题溯源 准确来 阅读全文
posted @ 2022-10-29 19:06 小超不挑食 阅读(714) 评论(0) 推荐(0)
摘要:1、问题描述 程序结束时,编码器缓冲区中数据没有完全输出,如下图所示 [当然,这只是一个警告,如果缓冲区帧数不多,完全可以忽略] 2、尝试解决 思路:程序结束时,查看缓冲区是否为空,不为空就输出完再结束,但是根据官网例子,继续采用 avcodec_receive_packet() 去读编码器,却读不 阅读全文
posted @ 2022-10-28 17:07 小超不挑食 阅读(1557) 评论(0) 推荐(0)
摘要:1、问题描述: 写文件的时候,编码器的 frame_size 比 输入帧的 nb_samples 小,导致如下图所示问题 2、尝试解决 (失败)显示修改 编码器的 frame_size 属性,失败原因:打开编码器(即调用avcodec_open2())时,会自动重置编码器frame_size属性。 阅读全文
posted @ 2022-10-26 10:56 小超不挑食 阅读(808) 评论(0) 推荐(0)
摘要:因项目需求实现混音效果,故学习记录了一下。 算法调研 常见混音方式: 加和后再除以混音通道数,防止溢出 加和并箝位,如有溢出就设最大值 饱和处理,接近最大值时进行扭曲(“软件混音的实现”一文算法就是这类) 归一化处理,全部乘个系数,使幅值归一化。(只适用于文件) 衰减因子法,用衰减因子限制幅值。 n 阅读全文
posted @ 2022-10-06 17:53 小超不挑食 阅读(1064) 评论(0) 推荐(0)
摘要:【第一】unable to decode APP fields: Invalid data found when processing input,读一帧或解码时会遇到: 【第二】编解拥堵或占用cpu较高 av_opt_set(pCodecEncodeCtx_Video->priv_data, "p 阅读全文
posted @ 2022-09-21 16:45 小超不挑食 阅读(430) 评论(0) 推荐(0)
摘要:完整使用示例,参考官方例子(http://www.ffmpeg.org/doxygen/5.0/muxing_8c-example.html#a57) 视频编解码 FFMPEG对通用的视频编解码做了统一接口处理的抽象,比如在解码处理时,无须关心其具体的编解码格式,仅需关心其pixfmt即可 一、视频 阅读全文
posted @ 2022-08-19 13:57 小超不挑食 阅读(709) 评论(0) 推荐(0)
摘要:音视频延迟调研和分析 视频延迟 关于视频的实时性归纳为三个等级: 伪实时:视频消费延迟超过 3 秒,单向观看实时,通用架构是 CDN + RTMP + HLS,现在基本上所有的直播都是这类技术; 准实时: 视频消费延迟 1 ~ 3 秒,能进行双方互动但互动有障碍。有些直播网站通过 TCP/UDP + 阅读全文
posted @ 2022-08-15 16:45 小超不挑食 阅读(118) 评论(0) 推荐(0)
摘要:实践中经常遇到 frame 的复制拷贝,特此记录一下; 深拷贝 连同数据也被复制一份 浅拷贝 只拷贝参数,具有相同的数据指针 相关 api av_frame_ref() 【函数原型】 点击查看代码 /** * Set up a new reference to the data described 阅读全文
posted @ 2022-08-15 09:58 小超不挑食 阅读(2048) 评论(0) 推荐(0)
摘要:相关基本 FFmpeg学习:音视频同步(1)相关基础定义 同步方式 目前主要有三种方式实现同步: 将视频和音频同步外部的时钟上,选择一个外部时钟为基准,视频和音频的播放速度都以该时钟为标准。 将音频同步到视频上,就是以视频的播放速度为基准来同步音频。 将视频同步到音频上,就是以音频的播放速度为基准来 阅读全文
posted @ 2022-08-05 14:59 小超不挑食 阅读(996) 评论(0) 推荐(0)
摘要:视频 保留全局变量 fps 1、将输入帧 pts 转换成fps 下的时间 音频 保留采样率 sample_rate 将输入帧 pts 转换成 sample_rate 下时间 这样上面两个pts就可以直接进行比较 举例 音频: packet pts:18363420280000 packet time 阅读全文
posted @ 2022-08-05 10:01 小超不挑食 阅读(144) 评论(0) 推荐(0)
摘要:SDL音频播放两种模式 SDL 播放音频文件有两种方法,可以理解成 推(push) 和 拉(pull) 两种模式。 推 就是我们主动向设备缓冲区填充 Buffer ,而 拉 就是由设备拉取 Buffer 填充到缓冲区。 两种方式优缺点对比: 官方推荐使用推送模式 推送延迟较大(推荐前几帧抛弃,待系统 阅读全文
posted @ 2022-08-03 14:32 小超不挑食 阅读(4010) 评论(0) 推荐(1)
摘要:SDL简单介绍 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL 阅读全文
posted @ 2022-08-01 15:29 小超不挑食 阅读(1511) 评论(0) 推荐(0)
摘要:视频重采样 视频重采样参数 1.图像色彩空间转换; 2.分辨率缩放; 3.前后图像滤波处理 图像宽高、像素格式、尺寸转换算法 视频像素和尺寸转换api 【第一】创建格式转换上下文 SwsContext* video_swscontext = NULL; 【第二】格式变换上下文初始化 【函数原型】 s 阅读全文
posted @ 2022-07-30 13:49 小超不挑食 阅读(561) 评论(0) 推荐(0)
摘要:FFmpeg日志系统 通过FFmpeg日志系统可以控制FFmpeg警告或错误输出内容和方式,日志输出部分的核心函数只有一个:av_log()。 函数调用结构图 av_log() 【函数原型】 av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av 阅读全文
posted @ 2022-07-29 11:00 小超不挑食 阅读(1234) 评论(0) 推荐(0)
摘要:重采样: 将音频进行SDL播放的时候,因为当前的SDL2.0不支持plannar格式,也不支持浮点型的,而最新的FFpemg会将音频解码为AV_SAMPLE_FMT_FLTP,这个时候进行对它重采样的话,就可以在SDL2.0上进行播放这个音频了。 重采样参数 1、sample rate(采样率):采 阅读全文
posted @ 2022-07-28 19:02 小超不挑食 阅读(2398) 评论(0) 推荐(1)
摘要:SetupDi 函数(主要介绍输出设备列表使用到的函数) 包含头文件和库 #include <SetupAPI.h> #pragma comment(lib,"SetupAPI.lib") 【第一】SetupDiGetClassDevs 【函数说明】:获取一个指定类别(如全部的麦克风)或全部类别的所 阅读全文
posted @ 2022-07-28 14:44 小超不挑食 阅读(1135) 评论(0) 推荐(0)
摘要:ACTK项目说明 待定 音视频格式 【编码格式调研】 ISO/ IEC (国际标准化组织和国际电工委员会)提出的音视频标准(包含音频和视频): MPEG-1 ( ISO/ IEC 11172) MPEG-2 (ISO/ IEC 13818) MPEG-4 (ISO/ IEC 14496) ITU- 阅读全文
posted @ 2022-07-27 09:52 小超不挑食 阅读(90) 评论(0) 推荐(0)
摘要:自带缓冲区 ffmpeg有自带缓存区,由于不对外暴露,无法很好的控制,经常出现播放花屏问题,当然我们可以修改源码,但通常做法是,忽略ffmpeg本身缓存区,自己实现缓冲队列,通常播放器底层会有两个队列解码队列(压缩数据) 渲染队列(非压缩数据)由于渲染队列通常有3帧左右的缓存就够了,所以当我们计算播 阅读全文
posted @ 2022-07-26 15:08 小超不挑食 阅读(1781) 评论(0) 推荐(1)