概述
1. Buffer 设计大小依据:
(1) 依据是 你所需要缓冲多长时间,比如是100ms还是50ms;
(2) 大小: 即每秒钟会收到的字节数;
Buffer = dwBytesPerSec * dwLatencyInMilliseconds / 1000;
2. 举例:
采集声音:(G711规格)
Buffer = 16 /8 * 8000 * (PTime) /1000
其中, 16/8为每一个G711的Samplez占用2个字节,
8000为采样率,即每1s需要采样8000个G711的Sample,
PTime = 缓冲时间(ms),假设PTime为50ms,
则 Buffer = 2*8000 * 50 / 1000 = 800 Bytes,(压缩前)
即 Capture的Buffer 大小为 mp_byte CapBuf [800];
这样,
经过G711压缩后得到的大小为400Bytes 每个包。
3. 每隔多长时间单位发送?
pTime * 采样频率。
如: 20 * 8000 /1000 = 160 (20为PTime, 8000为采样频率),
用WireShark截包看下来就是每两个包之间间隔160个单位。
50 * 8000 /1000 = 400 (同样)
4. 其他计算
samples/sec 16000 采样率
16000/1024 (FrameLen) 1秒钟发15.625 几个包 (SampleRate/帧长度(即1帧几个字节))
16k采样率 --->ClockRate 16k
44.1k采样率 --->ClockRate 44.1k
clockrate -> reso 视频90000,音频8000 (8khz) 或其他
比特率(码率) = 采样率(帧率)×采样位宽×声道数
SampleRate = 8000 (8000Hz),采样率,每秒钟的采样Sample数
BitRate = 384 , 每秒传送的比特(bit)数。单位为 bps(Bit Per Second)
Frames = 1, Number of Frames a Packet //一个包(Packet)有几帧
每帧毫秒数: = 1帧Sample数目 * 1000 / 每秒多少Sample
//[msec/frame] = [sample/frame] * 1000 [msec / sec] / [sample / sec]
timeIncrement = frameLen * 1000 / (double)param.outFs ;
(时间戳)
最后
以上就是坚定煎饼为你收集整理的流媒体 Buffer 设计原理的全部内容,希望文章能够帮你解决流媒体 Buffer 设计原理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复