视频直播技术大全、直播架构、技术原理和实现思路方案整理

原文链接:https://blog.csdn.net/zgpeace/article/details/108552358

说明

  • 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。

  • 直播易:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。

通用直播模型

  1. 首先是主播方,它是产生视频流的源头,由一系列流程组成:第一,通过一定的设备来采集数据;第二,将采集的这些视频进行一系列的处理,比如水印、美颜和特效滤镜等处理;第三,将处理后的结果视频编码压缩成可观看可传输的视频流;第四,分发推流,即将压缩后的视频流通过 络通道传输出去。

  2. 其次是播放端,播放端功能有两个层面,第一个层面是关键性的需求;另一层面是业务层面的。先看第一个层面,它涉及到一些非常关键的指标,比如秒开,在很多场景当中都有这样的要求,然后是对于一些重要内容的版权保护。为了达到更好的效果,我们还需要配合服务端做智能解析,这在某些场景下也是关键性需求。再来看第二个层面也即业务层面的功能,对于一个 交直播产品来说,在播放端,观众希望能够实时的看到主播端推过来的视频流,并且和主播以及其他观众产生一定的互动,因此它可能包含一些像点赞、聊天和弹幕这样的功能,以及礼物这样更高级的道具。

  3. 我们知道,内容产生方和消费方一般都不是一一对应的。对于一个直播产品来讲,最直观的体现就是一个主播可能会有很多粉丝。因此,我们不能直接让主播端和所有播放端进行点对点通信,这在技术上是做不到或者很有难度。主播方播出的视频到达播放端之前,需要经过一系列的中间环节,也就是我们这里讲的直播服务器端。

  4. 直播服务器端提供的最核心功能是收集主播端的视频推流,并将其放大后推送给所有观众端。除了这个核心功能,还有很多运营级别的诉求,比如鉴权认证,视频连线和实时转码,自动鉴黄,多屏合一,以及云端录制存储等功能。另外,对于一个主播端推出的视频流,中间需要经过一些环节才能到达播放端,因此对中间环节的质量进行监控,以及根据这些监控来进行智能调度,也是非常重要的诉求。

  5. 实际上无论是主播端还是播放端,他们的诉求都不会仅仅是拍摄视频和播放视频这么简单。在这个核心诉求被满足之后,还有很多关键诉求需要被满足。比如,对于一个消费级的直播产品来说,除了这三大模块之外,还需要实现一个业务服务端来进行推流和播放控制,以及所有用户状态的维持。如此,就构成了一个消费级可用的直播产品。

但是正如刚才所说的直播通用模型一样,实际上这里很多功能都可以抽象成一个通用功能,也就是说各家直播产品的需求和实现方式都类似。

直播架构

直播App 架构 和 技术点

一个完整直播APP功能

  1. 聊天: 私聊、聊天室、点亮、推送、黑名单等;
  2. 礼物: 普通礼物、豪华礼物、红包、排行榜、第三方充值、内购、礼物动态更新、提现等;
  3. 直播列表: 关注、热门、最新、分类直播用户列表等;
  4. 自己直播: 录制、推流、解码、播放、美颜、心跳、后台切换、主播对管理员操作、管理员对用户等;
  5. 房间逻辑: 创建房间、进入房间、退出房间、关闭房间、切换房间、房间管理员设置、房间用户列表等;
  6. 用户逻辑: 普通登陆、第三方登陆、注册、搜索、修改个人信息、关注列表、粉丝列表、忘记密码、查看个人信息、收入榜、关注和取关、检索等;
  7. 观看直播: 聊天信息、滚屏弹幕、礼物显示、加载界面等;
  8. 统计: APP业务统计、第三方统计等;

一个完整直播app实现流程

1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动

  • HLS与RTMP对比:HLS主要是延时比较大,RTMP主要优势在于延时低
    HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费
    相比使用RTSP协议的好处在于,一旦切分完成,之后的分发过程完全不需要额外使用任何专门软件,普通的 络服务器即可,大大降低了CDN边缘服务器的配置要求,可以使用任何现成的CDN,而一般服务器很少支持RTSP。
  • HTTP-FLV:基于HTTP协议流式的传输媒体内容。
    相对于RTMP,HTTP更简单和广为人知,内容延迟同样可以做到1~3秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-FLV要优于RTMP。
  • RTSP:实时流传输协议,定义了一对多应用程序如何有效地通过IP 络传送多媒体数据.
  • RTP:实时传输协议,RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。
  • RTCP:RTP的配套协议,主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向 络延迟等等。
  • 解码

    解封装

    • demuxing(分离):从视频流、音频流,字幕流合成的文件(容器格式(FLV,TS))中, 分解出视频、音频或字幕,各自进行解码。

    音频编码框架

    • fdk_aac:音频编码解码框架,PCM音频数据和AAC音频数据互转

    解码介绍

    • 硬解码:用GPU来解码,减少CPU运算
      优点:播放流畅、低功耗,解码速度快,
      缺点:兼容不好
    • 软解码:用CPU来解码
      优点:兼容好
      缺点:加大CPU负担,耗电增加、没有硬解码流畅,解码速度相对慢

    播放

    • ijkplayer:一个基于FFmpeg的开源Android/iOS视频播放器
      API易于集成;
      编译配置可裁剪,方便控制安装包大小;
      支持硬件加速解码,更加省电
      简单易用,指定拉流URL,自动解码播放.

    聊天互动

    *IM:(InstantMessaging)即时通讯:是一个实时通信系统,允许两人或多人使用 络实时的传递文字消息、文件、语音与视频交流.
    IM在直播系统中的主要作用是实现观众与主播、观众与观众之间的文字互动.

    • 第三方SDK
      腾讯云:腾讯提供的即时通讯SDK,可作为直播的聊天室
      融云:一个比较常用的即时通讯SDK,可作为直播的聊天室

    如何快速的开发一个完整的iOS直播app

    1、利用第三方直播SDK快速的开发

    • 七牛云:七牛直播云是专为直播平台打造的全球化直播流服务和一站式实现SDK端到端直播场景的企业级直播云服务平台.
      熊猫TV,龙珠TV等直播平台都是用的七牛云

    • 易视频云:基于专业的跨平台视频编解码技术和大规模视频内容分发 络,提供稳定流畅、低延时、高并发的实时音视频服务,可将视频直播无缝对接到自身App.

    • 阿里云视频直播解决方案
      直播推流 SDK(iOS/Android)
      直播播放器 SDK(iOS/Android)

      声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2020年10月2日
    下一篇 2020年10月2日

    相关推荐