ffmpeg动态切换输入源怎么让他推流不中断,推流到B站时时候不卡顿不黑屏
1条回答 默认 最新
关注 【相关推荐】
- 这个问题的回答你可以参考下: https://ask.csdn.net/questions/344985
- 您还可以看一下 梅会东老师的FFmpeg4.3系列之31:庖丁解牛之图像格式与压缩原理及实战课程中的 Bmp的16色彩图手把手案例分析小节, 巩固相关知识点
- 除此之外, 这篇博客: FFmpeg音视频播放器系列(第二篇:音视频播放同步)中的 音频采样、编码、播放 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
- 采样:正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在人耳所能听到声音频率最大值的2倍,那么40KHz的采样率已经足够,但是为了保证人耳听到的声音质量不降低,业界一般采用44.1KHz的采样率,即每秒采样44100次,更精确的采样率为48KHz
- 编码:声音的采样过程其实是一个模拟信号转为数字信号的过程,数字信号必然有一个范围,可以用1字节、2字节、4字节表示一个采样点的数值。业界也一般采用2字节(16bit),来表示一个采样点数值,是一个16位有符号的整数,表示范围是-32768~32767,总计65536种数值。
我们听到的声音还有声道一说,常见的为左右声道,这在FFmpeg里面称之为声道布局,常见的有
AV_CH_LAYOUT_STEREO:普通音响,即左、右布局
AV_CH_LAYOUT_2POINT1:普通音响加低音,即左、右布局,加低音炮
AV_CH_LAYOUT_SURROUND:环绕声,左、右、前中布局
AV_CH_LAYOUT_5POINT1:环绕声 + 左边际 + 右边际 + 低音炮
就常见的CD音频左右声道来说,1秒采样44100次,每个采样点16bit,2个通道,产生数据:
44100x16x2bits,这就是声音的原始数据,称为脉冲调制数据PCM(PulseCodeModulation),在保存PCM数据时,一般按照声道依次排列:(左右左右左右…)
描述一个PCM格式的数据需要一下几个概念:采样格式(即bit位数)、采样率、声道数。
PCM数据的存储还可以分为小端与大端格式,常见的是小端格式,
如果直接保存PCM声音原始数据,按照CD格式的音频数据,1分钟可以产生10M左右的数据,显然偏大,因此需要对PCM数据进行编码,编码的目的就是压缩数据。
这里简单说明一下常用的MP3与AAC编码的特点。
MP3:编码一帧,一般是1152个采样点,这样其数据大小是1152x2x2=4608字节
AAC:编码一帧,一般是1024个采样点,这样其数据大小是1024x2x2=4096字节 - 播放:理论上只要音频的播放与采样率一致,就可以完美的还原声音,但是因为编码一帧,就需要按帧进行解码,MP3播放这一帧耗时为:1152 / 44100 = 26.122449ms,AAC播放一帧耗时为:1024 / 44100 = 23.2199546ms,计时系统很难达到如此精确的计时,必然有一定的误差,我们只能以最快的速度将数据传递给播放设备,否则中间延迟过长,就会听到声音卡顿。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 孟德尔随机化结果不一致
- ¥15 深度学习残差模块模型
- ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
- ¥15 差动电流二次谐波的含量Matlab计算
- ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
- ¥15 C#如何调用串口数据
- ¥15 MATLAB与单片机串口通信
- ¥15 L76k模块的GPS的使用
- ¥15 请帮我看一看数电项目如何设计
- ¥23 (标签-bug|关键词-密码错误加密)