zoukankan      html  css  js  c++  java
  • Ios-视频直播-知识点汇总-持续更新

    最近公司要求做视频直播,之前工作几年,视频一直都是弱项,没怎么接触过,现在正好有机会深入的去了解一下,记录一些遇到的坑和需要用到的东西.

    ~公司要求,用HLS协议,要求可以播放m3u8格式的,当时一听一脸懵逼,什么鬼

    ~查询的过程中,参考了很多同行的博客,有很多知识点都很分散,也有很多Demo,第三方SDK,下载不能用等等,再此汇总一下,方便大家参考

    知识点:

    下面的知识点还有术语,在查询文档的过程中,可能会经常遇到。

    M3U8:可以做多码率的适配,根据网络带宽,客户端会选择一个适合自己码率的文件进行播放,保证视频流的流畅。

    1.传输协议:

    HLS:HTTP Live Streaming是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。服务器要求低,因为涉及到切片,延时会比较大,需要了解TS流

    RTSP:摄像头功能

    RTMP:看下它与流媒体服务器交互的过程,RTMP协议的默认端口是1935,采用TCP协议。并且需要了解FLV的封装格式

    RTP与RTCP等

    2.视频推流与视频拉流工作过程解析

    视频推流端:就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器

    2.1 采集音视频数据

    iOS平台上采集音视频数据,需要使用AVFoundation.Framework框架,从captureSession会话的回调中获取音频,视频数据

    2.2 硬编码,软编码音视频数据

    软编码就是利用CPU资源来压缩音视频数据,硬编码与之相反。

    软编码的话,现在广泛采用FFmpeg库结合编码库来实现,FFmpeg+X624来编码视频数据YUV/RGB输出H264数据,

    FFmpeg+fdk_aac来编码音频数据PCM输出AAC数据。

    2.3 根据所选流媒体协议封包音视频数据将音频,视频打包成packet

    2.4 与服务器交互发送封包数据

    根据所选流媒体协议,发送相应指令连接服务器,连接服务器成功后,就可以发送packet数据了

    3.拉流

    拉流,就是从流媒体服务器获取音频,视频数据

    3.1解析协议

    播放器端根据URL解析所用的流媒体协议(RTMP,HLS)

    3.2解封装

    解封装,就是demux的过程,从容器格式(FLV,TS)中,分离出音视频数据

    3.3解码

    解码,就是把获取到的数据解压缩,恢复成原始数据。解码就是将H264变成YUV,AAC变成PCM。

    解码可以使用软解码,硬解码。

    软解码就是利用CPU资源去解压缩数据,采用的方式是FFmpeg解码。

    硬解码,对于iOS平台来说,可以使用VideoToolbox.Framework(该框架只能在iOS 8.0及以上系统使用)

    硬解码视频数据

    3.4 渲染数据

    采用OpenGL渲染YUV数据,呈现视频画面。将PCM送入设备的硬件资源播放,产生声音。

    iOS播放流式音频,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架

    上面就是一些简单的知识点,汇总了一些,现在给大家推荐一些,DEMO和SDK,供大家参考

    先说第三方SDK:

    1.融云,http://www.rongcloud.cn/live

    下载下来好用,调用也很简单,集成很快,就是有点贵,要收费的哦,界面类似于,市面上大部分直播app,竖屏,有聊天室,可以送礼物等,不过不符合公司需求,pass

    2.暴风云直播, http://www.baofengcloud.com/apisdk/sdk/live/iossdk.html

    不好用,大家可以去试试

    3.网易云直播,http://dev.netease.im/docs?doc=devfunc_LiveStreaming

    好像是收费的,价格还不便宜,一般公司可能也不会用,功能很强大,不符合需求,pass

    4.腾讯直播,https://www.qcloud.com/solution/video.html

    同样收费,简单的看了一下,功能很强大,不过还是不符合需求

    剩下的SDK还有非常多,就不依依介绍了,更多资料复制下面的网站查看,有大神总结的很到位了

    http://www.ccidnet.com/2016/0606/10143020.shtml

    Demo:

    虽然市面上的SDK很多,不过还是没有特别符合需求的,所以就只能参考大神写的Demo了

    下面都是每个demo,都是经测试可以用的,不过注意,不是直播,大家可以参考参考原理,找自己需要的东西,替换url进行测试

    1.http://code.cocoachina.com/view/129748

    2.http://code.cocoachina.com/view/128253

    两个都是基于AVplayer写的

    3.http://code.cocoachina.com/view/128343 

    基于MediaPlayer写的 

    还有很多就不举例,以上这3个demo,都是很轻量级的,在她们的基础上稍作修改就可以用了.

    好坏就不做评价了,大家自己体会

    另外说一句,如果要做功能很复杂的直播,最好用SDK

    常用直播源:

    凤凰中文,http://zv.3gv.ifeng.com/zhongwen800k.m3u8

    香港卫视,http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8

    如果还想要其他的网站:直播源大全

    如果想了解更多的m3u8的资料:

    http://blog.csdn.net/langeldep/article/details/8603045

    iOS直播类App开发流程分解:

    http://blog.sina.com.cn/s/blog_aa7beba30102w8ws.html

  • 相关阅读:
    【集合】元组元素命名
    普通数组-队列
    稀疏数组
    Java基础 07 API概述 Scanner类 Random类 ArrayList类
    Java基础 06 类与对象、封装、构造方法
    Java基础 05 数组
    Java基础 04 IDEA、方法
    Java基础 04 [附] IDEA 的安装、配置与使用
    Java基础 03 流程控制语句
    Java基础 02 数据类型转换、运算符、方法入门
  • 原文地址:https://www.cnblogs.com/Ghosgt/p/6878908.html
Copyright © 2011-2022 走看看