zoukankan      html  css  js  c++  java
  • 直播技术栈梳理

    转自:https://www.cnblogs.com/xiaoniuzai/p/5937506.html

    主播端
    视频编码格式: H.264,H.265

    音频编码格式: AAC, HE-AAC

    编码的意义
    原始视频数据存储空间大,一个 1080P 的 7 s 视频需要 817 MB
    原始视频数据传输占用带宽大,10 Mbps 的带宽传输上述 7 s 视频需要 11 分钟
    基本原理
    主要就是去除冗余

    空间冗余:图像相邻像素之间有较强的相关性
    时间冗余:视频序列的相邻图像之间内容相似
    编码冗余:不同像素值出现的概率不同
    视觉冗余:人的视觉系统对某些细节不敏感
    知识冗余:规律性的结构可由先验知识和背景知识得到
    视频容器
    所谓容器,就是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。容器使得不同多媒体内容同步播放变得很简单,而容器的另一个作用就是为多媒体内容提供索引,也就是说如果没有容器存在的话一部影片你只能从一开始看到最后,不能拖动进度条(当然这种情况下有的播放器会话比较长的时间临时创建索引),而且如果你不自己去手动另外载入音频就没有声音。

    网络协议
    全称 协议本质 原理 延迟
    RTMP Real Time Messaging Protocol 长连接TCP 每个时刻的数据收到后立刻转发 1~3s
    HLS HTTP Live Streaming 短连接HTTP 集合一段时间数据,生成ts视频文件,更新m3u8索引 10~20s
    HTTP-FLV RTMP over HTTP 长链接HTTP 每个时刻的数据收到后立刻转发,但是使用HTTP协议 1~3s
    HTTP Live Streaming

    .ts + m3u8 index file 切割视频为3个ts,每个ts 10s 所以延迟20~30s
    基于HTTP,3次tcp握手,HTTP协议头,消耗大
    平滑切换码率
    基于HTTP可以避免防火墙或者代理问题
    在ios/android的webkit浏览器内核可以播放
    Real Time Messaging Protocol

    数据流向不会产生类似HLS的ts文件
    基于TCP,保持长连接,避免握手链接
    跨平台差,需要flash player
    总结
    流程:主播端采集 -> 主播端编码 -> RTMP协议上传视频 -> 流媒体服务器解码,转码 -> 使用不同的流媒体格式,flv or m3u8 -> 使用不同的推流协议HLS or RTMP over HTTP 推送

    资料参考
    移动直播技术秒开优化经验

    「视频直播技术详解」

  • 相关阅读:
    C#网络爬虫 WebUtility使用 转义字符 urlCode
    C#遍历文件夹及文件
    ThreadException
    unhandledException
    linq to object
    扩展方法
    反射常规
    字典缓存和泛型缓存
    lock和Monitor(锁对象)
    单例模式
  • 原文地址:https://www.cnblogs.com/javalinux/p/14057451.html
Copyright © 2011-2022 走看看