如何实现一个直播平台的相关基础及开源软件推荐

首先我们要大致知道一个直播系统核心的构成要件主要是三部分:

采集——主播使用 OBS 之类的软件来录制视频,并能够将数据发向服务器
转播——服务器使用 SRS/Red5 之类的软件实现接收采集端发来的数据并转发给回放端(观众)
回放——实质上就是指播放器,通常嵌入在 Web 页面或 App 里,观众通过它们来观看

一、视频直播相关协议

①RTMP(Real Time Messaging Protocol,实时消息传送协议)

RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:

1)工作在TCP之上的明文协议,使用端口1935;

2)RTMPT封装在HTTP请求之中,可穿越防火墙;

3)RTMPS类似RTMPT,但使用的是HTTPS连接;

RTMP协议是被Flash用于对象、视频、音频的传输。这个协议建立在TCP协议或者轮询HTTP协议之上。RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。

②RTSP(Real Time Streaming Protocol,实时流传输协议)

RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。

RTSP语法和运作跟HTTP/1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。代理服务器的缓存功能也同样适用于RTSP,并且因为RTSP具有重新导向功能,可根据实际负载情况来切换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

③RTP(Real-time Transport Protocol,实时传输协议)

RTP是针对多媒体数据流的一种传输层协议,详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通系统(配合H.323或SIP),使它成为IP电话产业的技术基础。

RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。

RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性,只管发送,不管传输是否丢包,也不管接收方是否有收到包。RTP 实行有序传送,RTP中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,如在视频解码中,就不需要顺序解码。

④RTCP(Real-time Transport Control Protocol,实时传输控制协议)

RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。

RTCP的主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。网络应用程序可以利用RTCP所提供的信息来提高服务质量,比如限制流量或改用压缩比小的编解码器。

二、直播相关推荐

   1. BeautifyFaceDemo 基于GPUImage的图片处理,美颜方面可以参考2. lf.swift 开源RTMP Swift 版3. PLPlayerKit 一个不依赖FFmpeg的播放器,支持RTMP4. HLS-Demo   HLS播放demo5. SmarterStreaming   直播SDK(支持私有协议和RTMP推流,如windows推流/android推流/iOS推流/windows播放器/android播放器/iOS播放器)6. VideoCore    IOS推流SDK(说明文档:https://www.sinacloud.com/doc/live/ios_push_sdk_doc.html)

三、直播的推流与拉流过程

①推流的过程:

1.通过摄像头或录屏功能进行视频采集用于直播间搭建。
2.通过话筒进行音频采集,音频原始数据格式:PCM。
3.将视频文件编码,视频格式从YUV(RGB)变为H.264(H.265)。
将音频文件编码,视频格式从YUV(RGB)变为H.264(H.265)。
4.将音频文件编码,音频格式从PCM变为AAC。
5.将视颊与音频文件编码为有“流媒体”特性的多媒体容器格式(Multimedia Container Format),此时音颊和视频(H.264和AAC)结合成了FLV或TS或RTMP Packet,这要视传输协议的规定而定)。
6.选择一种向服务器推流的协议(“流”即“有流媒体特性的多媒体容器格式的文件”),应用层协议:HLS;RTSP;RTMP,传输层协议:RTCP、RTP,网络层协议:RSVP。
7.传入推流地址(URL)来定位我们的推流目标(即将流媒体发送给「谁」)然后开始推流,直播间搭建中比如你在斗鱼当主播,OBS中的推流地址就写斗鱼的,你要是在六间房当程序员,程序中默认的推流地址就写六间房的。

②拉流的过程:

1、直播间搭建通过某种渠道获取拉流URL(或者叫播放URL),并选取一种从服务器拉流的协议,然后开始拉流应用层协议:HLS;RTSP;RTMP,传输层协议:RTCP、RTP,网络层协议:RSVP。
2、将处于「多媒体容器格式」的流解复用成为「视频编码格式」的视颊数据(如H.264)和「音频编码格式」的音频数据(如AAC)。
3、使用硬解码(GPU解码+CPU辅助)或软解码(CPU解码)解码后视频数据格式为YUV或RGB,音频数据格式为PCM解码后视频数据格式为YUV或RGB,音频数据格式为PCM。
4.执行音画同步操作。
5.将同步后的音频(PCM)送到音频输出设备播放。
将同步后的视频(YUV或RGB)送到视频输出设备播放。

四、视频推流端

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

①选择流媒体协议

现在直播应用,采用RTMP协议居多,也有部分使用HLS协议。

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

采用HLS协议,因为涉及到切片,延时会比较大,需要了解TS流。

②采集音视频数据

做直播,数据的来源不可缺少,就是采集摄像头,麦克风的数据。

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

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

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

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

④根据所选流媒体协议封包音视频数据

将音频,视频打包成packet。

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

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

五、视频拉流端

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

①解析协议

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

②解封装

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

③解码

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

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

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

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

④渲染数据

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

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

六、直播视频存放

①淘宝-阿里云OSS对象存储(付费):

https://help.aliyun.com/product/31815.html?spm=a2c4g.750001.0.0.26537b13TbD7qP

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

(媒体处理文档地址:https://help.aliyun.com/document_detail/29196.html?spm=a2c4g.11186623.6.542.60a824c0AAslJV)

②腾讯-VOD云点播(付费):

https://cloud.tencent.com/document/product/266

③OBS Studio(开源免费):

https://obsproject.com/wiki/OBS-Studio-Quickstart

如何实现一个直播平台的相关基础及开源软件推荐相关推荐

  1. vue+node.js手把手教你搭建一个直播平台(一)

    上一期,帅气的小羽给老铁们简单介绍了项目的功能以及需要用到的一些环境和工具,现在就让我们荡起双桨,撸起袖子,准备开始敲代码啦!!! 先甩锅,小羽主要是搞前端开发的,所以这期张主要讲后端内容,可能讲的不 ...

  2. 搭建直播平台中的美颜效果开源实现,从AI到美颜全流程讲解

    搭建直播平台中的美颜效果开源实现,从AI到美颜全流程讲解 美颜和短视频 美颜相关APP可以说是现在手机上的必备的软件,例如抖音,快手,拍出的"照骗"和视频不加美颜效果,估计没有人敢 ...

  3. axios下载图片 node_vue+node.js手把手教你搭建一个直播平台(二)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的后端搭建,这期就让小羽带大家来搭建一下前端的框架. 1.创建前端工程 毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vu ...

  4. vue+node.js手把手教你搭建一个直播平台(二)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的后端搭建,这期就让小羽带大家来搭建一下前端的框架. 1.创建前端工程 毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vu ...

  5. vue 前端显示图片加token_vue+node.js手把手教你搭建一个直播平台(二)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的后端搭建,这期就让小羽带大家来搭建一下前端的框架. 1.创建前端工程 毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vu ...

  6. vue+node.js手把手教你搭建一个直播平台(四)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的前端页面的初步切图,这期就让小羽带大家接入直播相关的api接口.敲黑板!敲黑板!敲黑板!重点来啦~ 1.api接口相关 在src目录下个新建api文件夹 ...

  7. vue+node.js手把手教你搭建一个直播平台(三)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的前端框架的搭建,这期就让小羽带大家切图,没错啦,就是老铁们心心念念的切图啦. 补充上期遗漏的内容 但是在正式开启这期内容前,先补充点上期的内容 配置全局 ...

  8. 又一个直播平台走到终点?官网无法访问疑似停服,主播讨要薪资

    7月2日晚间,多名网友反映,触手直播疑似停服,用户账号无法登陆.目前,触手直播PC端和App均无法正常打开,内容无法查看. 对此,触手直播官方尚未作出回应. 不少网友表示,触手直播这是要成为下一个熊猫 ...

  9. 干货:如何打造一个直播平台

    上几篇介绍了如何实现一个百万级别的语音聊天室,本篇将介绍直播平台的设计.开始分享这个项目其实有点犹豫,因为我所参与的直播平台跟业界常用的方案不太一样.但是仔细想想,架构设计本来就是在各种条件约束下的因 ...

最新文章

  1. 【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )
  2. memcached 扩展安装(windows)
  3. socket未读消息 如何设计_如何设计IM系统的消息架构?
  4. JAVA语法——经典题目01
  5. c语输入单引号_C语言的printf不能用单引号?
  6. TCP/IP详解卷1中文版勘误表前言
  7. [html] websocket和http2有什么区别?http2能取代websocket吗?为什么?
  8. python必读_学好Python必读的几篇文章
  9. 文件fluent_Win10 中解决FLUENT中UDF 的方法
  10. 卸载Notepad++
  11. 毫米和像素怎么换算_自己计算出来的关于像素和厘米单位的换算
  12. 启动马达接线实物图_三相电机直接启动接线图及启动过程解说
  13. 我的大三,青山隐隐,绿水悠悠
  14. python语句中print(type(1j))_Python语句 print(type(1/2))的输出结果是:______
  15. 如何检查电脑端安装的Flash Activex 控件版本?
  16. 纯硬件无人直播手机,不需要电脑,不需要虚拟摄像头,可人工干预、可粉丝互动,半无人直播
  17. Navicat还原nb3备份文件步骤
  18. 用Arduino板为另一块Arduino烧写(更新)BootLoader
  19. 计算机网络及多媒体知识,计算机基础知识:多媒体的基本概念及关键技术
  20. unity3d序列帧动画无法显示坑

热门文章

  1. 图片加载优化,拒绝OOM
  2. Gensim核心概念以及使用流程
  3. 【致青春】开垦出的IT路
  4. 让私家云等自己温控风扇、改变前面板LED颜色
  5. 四个大数相加 问题的分析(转 韩卫平的笔记 )
  6. 东北农大: 邻苯二甲酸酯会导致十二指肠屏障缺陷中的微生物群-屏障-免疫交互的破坏...
  7. 两个tplink路由器有线桥接_两个TP-LINK的无线路由器的有线桥接怎么样可以做到同一网络覆盖...
  8. 转:是什么触动了你内心深处的善意与同情?
  9. CMOS Image Sensor的MIPI CSI接口介绍及波形实测
  10. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量