zoukankan      html  css  js  c++  java
  • iOS直播直播,头都大了

    随着直播市场的火热,市场大军都逐步进入直播市场 ,腾讯旗下的NOW直播也不例外

    先说说直播设计底层

    一 、流媒体

    1 - 伪流媒体

    1.1 扫盲:边下载边播放
    1.2 伪流媒体:视频不是实时播放的,先把视频放在数据库,再供客户端访问,比如:优酷,爱奇艺等

    1.3 特点:

    边下边存,文件会保存.
    遵守了 HTTP 协议,但是没有遵守 RTMP 和 HLS 协议
    能够实现快进和快退的功能
    实现简单,成本低

    2 实时流媒体

    2.1 真正的流媒体,边下边播,但不会保存下载的文件

    2.2 特点:

    下载的文件不会保存
    遵守了 RTMP 或者 HLS 协议
    只能实现实时播放,不能快进或者快退
    实现成本比较高,实现复杂

    3 常见的流媒体协议: HLS(苹果基于 HTTP 开发的流媒体协议),RTMP(Adobe 的私有协议),MMS (微软).

    HLS协议
    1 HLS: HTTP Live Streaming 是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备提供音视频直播和点播方案.

    2 直播原理:通过相关设备采集摄像头的视频和麦克风的音频,并实时进行 H264视频编码和 AAC 音频音频编码,并按照 HLS协议规范,转换为标准的 TS文件以及m3u8(是一个地址,里面记录了服务器多对应的文件)索引文件.

    3 HLS 点播:就是对 HTTP 进行分段播放,不同的就是在于对 HTTP 进行的分段非常小,因此可以说, HLS 点播的重点就是对 HTTP 进行分段.(现在的分段技术比较常见不在赘述)

    4 HLS 直播原理:和其他的常见的直播协议(如: RTMP,RTSP,MMS)不同, 遵守HLS 协议的直播在客户端接收到的并不是完整的数据流. 即HLS 协议的服务器将最新获取到的片段进行分割为小片段,客户端获取服务器刚编好的最新的片段进行播放.这样服务器端不断的获取新的数据进行分割成新的片段,客户端不断的从服务器端获取最近的片段进行播放.由此可以说 HLS 是以点播的形式实现的直播.

    5 HLS 的特点:由于数据是通过 HTTP 传输的,所以不用考虑防火墙和代理的问题,由于分割的时长很短,所以客户端可以很快的实现码率切换,以适应不同的带宽.HLS 协议的延迟一般会高于其他协议的流媒体直播.
    6 HLS 实现步骤采取视频源和音频源数据对原始数据尽心 H264和 ACC 编码视频和音频数据封装为 MPEG-TS 包 HLS 分段生成策略以及 m3u8索引文件 HTTP 传输协议
    注:需要说明的是 HLS 分段策略的分段时长以10S 为最好.

    二 、RTMP 协议

    1 RTMP 实时消息传输协议,是现在比较常用的协议
    2 RTMP使用原理:首先推流到 RTMP 服务器,然后再有 RTMP 服务器提供 RTMP 视频服务.
    注:需啊说明的是:RTMP 也提供 HLS, 将音视频切位 ts 流,然后用户可以直接播放 m3u8流媒体.
    
    3 RTMP协议规定
    3.1 建立一个网络连接
    3.2 建立一个网络流(发送多媒体的通道)
    注:只能建立一个网络连接,但是可以建立多个网络流
    
    4 RTMP 协议使用步骤
    4.1 握手:RTMP 协议都是以握手开始的
    
    客户端先发送 C0,C1两个数据块,服务器收到 C1或者 C2块的时候开始发送 S0和 S1
    客户端收齐 S0和 S1的时候开始发送 C2,当服务器收齐 C0和 C1的时候开始发送 S2
    当客户端收到 S2同时服务器收到 C2 的时候,握手完成
    4.2 建立连接:建立客户端和服务器端的网络连接
    
    > 客户端发送命令消息中的”connect”,到服务器,请求与一个服务器应用实例建立连接
    > 服务器接收到请求后,发送确认消息,同时连接到请求中的连接实例
    > 服务器发送设置带宽协议消息到客户端
    > 客户端接收到 设置带宽 消息之后,发送确认消息到服务器
    > 服务器发送用户控制消息中的”stream”消息到客户端
    > 服务器发送消息命令中的”结果”消息到客户端
    
    4.3 建立流:建立客户端和服务器端的”流连接”
    
    > 客户端发送消息命令中的”创建流”到服务器
    > 服务器接收到”创建流”命令后,发送”结果”命令到客户端
    
    4.4 播放传输音视频数据
    
    > 客户端发送”播放”命令到服务器
    > 服务器收到消息后,发送 设置消息大小协议消息
    > 服务器发送” streambegin”,告知客户端流 ID
    > 若播放成功的话,服务器发送”响应状态”到客户端.告知客户端播放成功
    > 服务器发送客户端要播放是数据

    流媒体的播放

    1 HLS 的流媒体通过AVPlayer/AVPlayerViewController 和 MPMviePlayerController/MPMoviePlayerViewController 来实现.
    2 RTMP 的流媒体要用第三方框架实现 如 FFMpeg ,IJKPlayer和 VLC 等
    3 常用的流媒体框架:百度/阿里/腾讯/网易/斗鱼直播伴侣/七牛云等

    -项目主要是基于ijkplayer 的. 最好是打包成framework
    . 我也准备好了一份打包好的分享给大家
    -百度云盘链接: http://pan.baidu.com/s/1pLjbecF 密码: 5eac

    快速开发,整个demo仅用了一天时间

    打开项目记得用真机测试哦,不然模拟器会有语言跟不上 失真的现象哦
    github -> https://github.com/ChinaArJun/Tencent-NOW



    文/IOS_DeveIoper(简书作者)
    原文链接:http://www.jianshu.com/p/00747b41c741
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    hdu 5101 Select
    hdu 5100 Chessboard
    cf B. I.O.U.
    cf C. Inna and Dima
    cf B. Inna and Nine
    cf C. Counting Kangaroos is Fun
    Radar Installation 贪心
    spfa模板
    Sequence
    棋盘问题
  • 原文地址:https://www.cnblogs.com/MyBlogZH/p/5765649.html
Copyright © 2011-2022 走看看