首先是主播方,它是产生视频流的源头,通过一定的设备来采集数据。比如我们的是通过车载终端来获取视频流数据的。

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

直播服务器端提供的最核心功能是收集主播端的视频推流,并将其放大后推送给所有观众端。除了这个核心功能,还有很多运营级别的诉求,比如鉴权认证,视频连线和实时转码,自动鉴黄,多屏合一,以及云端录制存储等功能。另外,对于一个主播端推出的视频流,中间需要经过一些环节才能到达播放端,因此对中间环节的质量进行监控,以及根据这些监控来进行智能调度,也是非常重要的诉求。实际上无论是主播端还是播放端,他们的诉求都不会仅仅是拍摄视频和播放视频这么简单。在这个核心诉求被满足之后,还有很多关键诉求需要被满足。比如,对于一个消费级的直播产品来说,除了这三大模块之外,还需要实现一个业务服务端来进行推流和播放控制,以及所有用户状态的维持。如此,就构成了一个消费级可用的直播产品。

视频直播方案(包括APP在内)

录制->编码->网络传输->解码->播放

以上为直播的整体流程,根据该流程分为以下技术点:

怎样录制直播视频(流媒体源/编码/封装)怎样实时上传直播视频(视频推流:

如何推/往哪里推/推流服务器)怎样播放直播视频(如何看: HLS/rtmp/flv)直播间的用户是如何交互

如何搭建一个完整的视频直播系统?一个完整的直播系统大致包含这几个环节:采集、前处理、编码、传输、解码和渲染。在两端传输的过程中再加上一个服务端处理。大致的模型如下:

推流,指的是把采集阶段封包好的内容传输到服务器的过程。

流程如下:

经过输出设备(AVCaptureVideoDataOutput)得到原始的采样数据–视频数据(YUV)和音频数据(AAC);

使用硬编码(对应系统的API)或软编码(FFMpeg)来编码压缩音视频数据;分别得到已编码的H.264视频数据和AAC音频数据;

根据不同的封装格式(如FLV、TS、MPEG-TS);

使用HLS协议的时候加上这一步(HLS分段生成策略及m3u8索引文件)通过流上传到服务器;

服务器进行相关协议的分发目前主流的推送协议,以及各自的优缺点如下:

RTMP

RTMP是Real Time Messaging Protocol(实时消息传输协议)的缩写,是Adobe公司为Flash/AIR平台和服务器之间音、视频及数据传输开发的实时消息传送协议。

RTMP协议基于TCP,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。RTMP是目前最主流的流媒体传输协议,对CDN支持良好,实现难度较低,是大多数的直播平台的选择。

不过RTMP有着一个最大的不足——不支持浏览器,且Adobe已不再更新。因此直播服务要支持浏览器的话,需要另外的推送协议支持。

HLS

Http Live Streaming是由Apple公司定义的基于HTTP的流媒体实时传输协议。它的原理是将整个流分为多个小的文件来下载,每次只下载若干个。服务器端会将最新的直播数据生成新的小文件,客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。基本上,HLS是以点播的技术实现了直播的体验。因为每个小文件的时长很短,客户端可以很快地切换码率,以适应不同带宽条件下的播放。

分段推送的技术特点,决定了HLS的延迟一般会高于普通的流媒体直播协议。

传输内容包括两部分:一是M3U8描述文件,二是TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。

由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,不过HLS的

WebRTC

WebRTC(Web Real-Time Communication),即“源自网页即时通信”。

WebRTC是一个支持浏览器进行实时语音、视频对话的开源协议。

WebRTC的支持者甚多,Google、Mozilla、Opera推动其成为W3C推荐标准。

WebRTC支持目前的主流浏览器,并且基于SRTP和UDP,即便在网络信号一般的情况下也具备较好的稳定性。

此外,WebRTC可以实现点对点通信,通信双方延时低,是实现“连麦”功能比较好的选择。

拉流,指服务器已有直播内容,用指定地址进行拉取的过程。根据协议类型(如RTMP、RTP、RTSP、HTTP等),与服务器建立连接并接收数据;流程如下:

解析二进制数据,从中找到相关流信息;根据不同的封装格式(如FLV、TS)解复用(demux);

分别得到已编码的H.264视频数据和AAC音频数据;

使用硬解码(对应系统的API)或软解码(FFMpeg)来解压音视频数据;经过解码后得到原始的视频数据(YUV)和音频数据(AAC);

因为音频和视频解码是分开的,所以我们得把它们同步起来,否则会出现音视频不同步的现象,比如别人说话会跟口型对不上;

最后把同步的音频数据送到耳机或外放,视频数据送到屏幕上显示。

直播架构(包括APP)

采集端流程
(1)音视频采集

        (2)视频处理(3)音视频编码压缩(4)把音视频封装成FLV.TS采集端;(常用框架)AVFoundation框架 数据FFmpeg 框架  音频压缩X264 框架   视频压缩Libremp 框架   推流

服务器流程
(1)数据分发 (SDN)

(2)展示画面

(3)录制视频

(4)实时转码

   常用服务器;SNS、BMS、nginx

播放端流程
(1)从FLV.TS中获取音视频数据

(2)音视频编码

(3)播放

RTSP;实时流传输协议,是TCP/IP协议体系中的一个应用层协议.RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。

RTMP;实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。

FLV中的TS;首先引入dts(decode time-stamp)的概念,解码时间戳,标识数据送入解码器的时间,就是开始解码的时间,应该按时随着解码顺序而递增的。 flv格式在码流里有time-stamp位。由Timestamp和TimestampExtended组合得出TS(time-stamp),单位是毫秒。

可见TS是递增的,又知道此码流有B帧,所以播放顺序一定是和解码顺序不同的。所以flv中的TS应该是DTS。

HLS;Http Live Streaming是由Apple公司定义的基于HTTP的流媒体实时传输协议。它的原理是将整个流分为多个小的文件来下载,每次只下载若干个。服务器端会将最新的直播数据生成新的小文件,客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。基本上,HLS是以点播的技术实现了直播的体验。因为每个小文件的时长很短,客户端可以很快地切换码率,以适应不同带宽条件下的播放。

简单讲就是把整个流分成一个个小的,基于HTTP的文件来下载,每次只下载一些,前面提到了用于H5播放直播视频时引入的一个.m3u8(extended M3U playlist)的文件,这个文件就是基于HLS协议,存放视频流元数据的文件。

分段推送的技术特点,决定了HLS的延迟一般会高于普通的流媒体直播协议。

传输内容包括两部分:一是M3U8描述文件,二是TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。

由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,不过HLS的WebRTCWebRTC(Web Real-Time Communication),即“源自网页即时通信”。

WebRTC是一个支持浏览器进行实时语音、视频对话的开源协议。WebRTC的支持者甚多,Google、Mozilla、Opera推动其成为W3C推荐标准。WebRTC支持目前的主流浏览器,并且基于SRTP和UDP,即便在网络信号一般的情况下也具备较好的稳定性。

视频直播方案(播放器和SDK)相关推荐

  1. Ios精品源码,tableview下载视频直播源播放器图片位置3D立体旋转相册屏风动画

    1.tableview的展开收起以及cell的选中未选中源码 2.ios后台下载视频 3.直播源播放器-电视台,乐视直播,熊猫直播,电视剧轮播,电影等 4.自定义文本图片位置源码 持续更新 求star ...

  2. Ios精品源码,tableview下载视频直播源播放器图片位置3D立体旋转相册屏风动画...

    2019独角兽企业重金招聘Python工程师标准>>> 1.tableview的展开收起以及cell的选中未选中源码 2.ios后台下载视频 3.直播源播放器-电视台,乐视直播,熊猫 ...

  3. 网页全终端视频流媒体视频直播/点播播放器EasyPlayer.js实现WEB播放H265/HEVC视频方案介绍

    https://blog.csdn.net/TsingSee/article/details/104516857

  4. 熊猫TV直播H5播放器架构探索

    本文来自熊猫TV音视频技术专家姜雨晴在LiveVideoStackCon 2017上的分享,并有LiveVideoStack整理成文.当下,打造一款播放器已经有比较好的开源实现,但熊猫TV为什么还要自 ...

  5. 即构科技推出小程序视频直播方案,与iOSAndroid APP互通连麦

    2017年12 月 26 日,微信小程序正式对外开放了实时音视频录制及播放能力.符合类目要求(见下方表格)的小程序自助开通后,可自建或使用云服务,实现单向和互动的音视频功能,如视频直播.互动直播.在线 ...

  6. 永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放

    永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放 1.H5播放webrtc,现在各大浏览器已经逐渐加大对WebRTC技术的支持,成都视开信息科技视频团队开发webrt ...

  7. C++ RTMP直播流播放器

    抛开flash,自己开发实现C++ RTMP直播流播放器 众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中.本人研究并用C++开发实现了RTMP直播流协议的播放器 ...

  8. Android可以使用的直播流播放器Vitamio5.2.3

    yixia大神的git上有两个Android直播流播放器的项目:GitHub - yixia/VitamioBundle: Vitamio for Android  弄了1天没弄出来,过! GitHu ...

  9. LivePlayer H5直播/点播播放器安装与使用

    LivePlayer H5播放器 简介 H5直播/点播播放器,使用简单,功能强大, 免费使用 支持m3u8播放; 支持HTTP-FLV播放; 支持RTMP播放; 支持直播和点播播放; 支持播放器快照截 ...

最新文章

  1. CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
  2. 数据结构与算法:树与二叉树python实现
  3. 导入自己写的类,却被标红,原因及解决方法是?(Pycharm编辑器为例)
  4. 卷积及卷积的性质与应用
  5. 大学学计算机用游戏本好吗,大学学建筑学用什么配置的笔记本电脑好?
  6. linux link path walk,python之os.walk()与os.path.walk()
  7. 北京理工珠海学院的计算机专业怎么样,北京理工大学珠海学院怎么样?北京理工大学珠海学院优势有哪些?...
  8. 微信公众号模板消息配置和发送
  9. 打印机有关术语及解释
  10. 微信小程序列表首字母排序并根据字母定位
  11. iOS最安全?细数iOS曝过的安全漏洞|苹果|iOS|漏洞
  12. 数据挖掘十大经典算法,你都知道哪些?
  13. Golang并发下的数据结构及其底层剖析
  14. python数据分析——pandas
  15. 这个世界上有三种几何学
  16. 【计算机图形学】c++ OpenGL 二维变换(包括多边形绘制、平移、旋转及缩放)
  17. 函数平移口诀_呼和浩特市||初中函数巧平移方法
  18. linux查询raid信息,linux查看raid信息
  19. python毕业设计作品基于django框架 校园失物招领系统毕设成品(7)中期检查报告
  20. (附源码)计算机毕业设计SSM应急互助信息管理系统

热门文章

  1. Android kotlin自定义自动换行LinearLayout
  2. 【设计模式】工厂系列
  3. android 实现视频播放功能,Android项目实现视频播放器
  4. 蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理
  5. oracle rac多实例dg,ORACLE RAC+DG(单实例)
  6. 软件危机的定义?软件危机的7个典型表现和为什么会出现软件危机?
  7. oracle无法删除em,Oracle 11g EM删除重建的方法
  8. FME模板兴趣班第十八期(面遮挡处理) 任务小结
  9. MybatisPlus基本查询
  10. Mac终端Last login: Fri Aug 6 16:01:33 on ttys000