• 2017-06-15

    音频编码的一些笔记

    Views: 23014 | No Comments

    名词解释

    采样率/Sampling Rate/Sampling Frequency: 表示原始音频,每秒需要多少个值来表示(1秒时间内采样多少次)。
    采样位数/Sampling Bit Depth/bits per sample(bps): 用多少比特来存储一个采样值。
    采样比特率/Sampling Bit Rate: 指原始音频每秒需要多少比特来表示,显然等于 Rate x Bits。
    帧长/Frame Duration/Frame Lenght: 表示每帧(数据块)所表示原始音频播放需要的时长。
    帧大小/Frame Size: 表示每帧(数据块)所表示原始音频播放需要的存储空间。
    比特率/Bit Rate: 对于固定长度编码,表示编码后,每秒需要多少个比特来表示。

    bits per sample 和 bits per second 的缩写是相同的容易混淆。

    G.711 Codec

    G711A - G.711 a-law, alaw, 世界用。
    G711U - G.711 μ-law, ulaw, 北美用。

    Sampling Rate: 8KHz
    Sampling Bits: 8 bit

    Bit Rate: 64 kbit/s
    FrameDuration: 10 ms
    Frame Size: 640 bit, 80 Bytes
    RTP FrameDuration: 20 ms
    每 RTP 报文含 2 个 G.711 帧。

    iLBC - internet Low Bitrate Codec

    Sampling Rate: 8KHz
    Sampling Bits: 16 bit

    Bit Rate: 13.33 kbit/s
    Frame Duration: 30 ms
    Frame Size: 400 bit, 50 Bytes

    Bit Rate: 15.20 kbit/s
    FrameDuration: 20 ms
    Frame Size: 304 bit, 38 Bytes

    参考:CISCO - Voice Over IP - Per Call Bandwidth Consumption http://www.cisco.com/c/en/us/support/docs/voice/voice-quality/7934-bwidth-consume.html

    Posted by ideawu at 2017-06-15 14:59:43 Tags: , ,
  • 2017-06-02

    关于TCP粘包和拆包的终极解答

    Views: 26693 | 1 Comment

    程序员行业有一些奇怪的错误的观点(误解),这些误解非常之流行,而且持有这些错误观点的人经常言之凿凿,打死也不相信自己有错,实在让人啼笑皆非。究其原因,还是因为这些错误观点所对应的正确观点不符合人的正常思维习惯,是扭曲人的直观感受的。

    有两个错误观点非常之经典,一而再,再而三的出现,就跟韭菜一样,割不完,还越长越多。一是经典的"服务器最多65536个连接"误解,打开链接看介绍。另一个就是这里要讲的TCP"粘包"和"拆包"问题。

    基于前面的思路,我们先介绍人的正常思维习惯,然后再介绍扭曲的正确观点,这样你就会印象深刻了。

    Continue reading »

    Posted by ideawu at 2017-06-02 15:02:56
  • 2017-05-17

    轻量级 COMET 服务器 icomet 支持 EventSource(SSE)

    Views: 18100 | No Comments

    最初的 COMET 技术,指的是 HTTP 长轮询,不过,随着时间的推进,许多能实现浏览器即时推送的技术都可被称为 COMET 技术。由我开发的基于 libevent 库的轻量级 COMET 服务器开源项目 icomet,支持主流的浏览器推送技术,并且支持移动端。

    最近,在网友的贡献下,icomet 支持了 HTML 5 的 Server-Sent Events(SSE, EventSource) 技术。这项技术也是 W3C 标准之一,详情可见:http://www.w3.org/TR/eventsource/

    在支持 HTML 5 的浏览器中使用 SSE,代码会非常简洁,示例如下:

    var source = new EventSource("http://127.0.0.1:8100/sse?cname=12&seq=1");
    source.onmessage = function(e) {
        document.body.innerHTML += e.data;
    };
    

    e.data 就是服务器推送的数据。icomet 项目源码中带有 demo/web/sse.html 脚本,你直接拖到浏览器里即可看运行效果。

    源码和示例下载:https://github.com/ideawu/icomet

    Posted by ideawu at 2017-05-17 14:21:01 Tags:
  • 2017-02-16

    新浪微博劫持iTunes链接加入陌生推广码

    Views: 16892 | 2 Comments

    有微博用户抱怨他在微博上面发布的带有自己推广码(可带来佣金收益), 都被微博替换成了某个陌生的推广码, 他自己的推广码被覆盖了!

    @im61: 马勒戈壁的微博,我每天用 @PriceTag应用限免 这个账号发限免应用,链接里带了我的 iTunes 联盟令牌: 1001lsTF 和活动代码 wb_alet,结果发现几乎没有流量过来,刚刚 @图拉鼎 让我分析一下分享链接,大吃一惊啊,微博自动转换短链接,里面悄悄带上了自己的广告代码,我每天分享的收入都跑他口袋去了,无耻

    我验证了下, 确实如此. 验证过程:

    1. 使用新浪微博的官方网页发布一条带 itunes 链接的微博, 该链接并没有at(推广码)参数.
    2. 微博发出后, 新浪微博使用其控制的短链接服务t.cn(whois注册人是 domainname@staff.sina.com.cn )为用户的原始链接生成了短链接.
    3. 该短链接经过展开, 发现原始链接被非法加入了at参数. 该参数是iTunes推广码at=1001lbb6, 可为码的拥有者带来佣金收益.

    Continue reading »

    Posted by ideawu at 2017-02-16 16:23:17
  • 2017-02-03

    将iPhone上的照片拷贝到Mac上

    Views: 16993 | 2 Comments

    如果你想将iPhone手机上的照片拷贝到你的Mac上, 你应该使用"Image Capture"这个应用, 而不是什么"Photos", 苹果真他妈脑残!

    Posted by ideawu at 2017-02-03 12:04:47
  • 2016-12-08

    正确的将浮点数转成整数的方法 – 避免强制类型转换

    Views: 18570 | 4 Comments

    基于思维惯性, 一般我们会直接利用语言的强制类型转换, 将浮点数转成整数. 事实上, 强制转换在计算机内部的实现相当于直接抹零, 而浮点数经过运算后, 往往不能准确地表示整数, 这会导致严重的问题, 特别是涉及到钱的时候.

    例如,

    double f = 9.99999;
    int a = (int)f;
    printf("%f, %d\n", f, a);
    

    输出:

    9.999990, 9
    

    Continue reading »

    Posted by ideawu at 2016-12-08 21:15:32
|<<<2345678910>>>| 6/124 Pages, 743 Results.