我是靠谱客的博主 坚定煎饼,最近开发中收集的这篇文章主要介绍流媒体 Buffer 设计原理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 设计原理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部