七牛雲直播服務快速接入手冊

互聯網直播是一種基於RTMP協議的業務。RTMP協議是一種基於TCP的協議。在實際的業務模型中,又分爲客戶端和服務端。客戶端主要是利用RTMP協議進行數據包的發送,通常稱之爲推流。服務端主要用來接收客戶端發送過來的RTMP協議數據包,並轉發出去供訂閱的客戶播放,訂閱直播播放的客戶從服務端給出的一個地址請求數據,請求的過程也是基於RTMP的協議,這個過程稱之爲拉流。一般的狀況下,直播的業務模型是一路推流到服務器,而後可能會有多路觀看的拉流請求,即1:N的模型。php

RTMP協議中,服務端的監聽端口默認爲 1935 ,在某些狀況下,必須設置防火牆容許TCP協議的數據穿透這個端口。java

live layout

常規的推流端主要有以下幾種:node

  1. 手機,Android和iOS平臺的手機是互聯網直播中的主要推流客戶端。通常適用於移動直播的場景下的業務,好比手遊直播,秀場直播,戶外直播等。python

  2. PC端推流軟件,好比OBS( https://obsproject.com ),這個軟件是跨平臺的RTMP推流軟件,支持Windows,Linux和Mac系統。通常適用於PC端的推流業務,好比網遊直播,客戶端遊戲直播等。git

  3. 攝像設備,好比監控設備或者是網絡攝像機,這部分設備推出來的流各類各樣,用途普遍。通常適用於會議直播,運動賽事現場直播等。github

七牛雲直播提供了Android和iOS平臺的推流客戶端和播放器,並自帶美顏功能,方便你們開發各類直播APP。另外七牛雲直播的服務器支持標準的RTMP協議,任何遵循RTMP協議的推流設備均可以使用七牛雲直播服務。編程

首先,咱們瞭解下,七牛雲直播服務的業務模型。ruby

pili-live-layout

流管理服務端SDK
首先七牛雲直播提供了服務端的SDK方便客戶和七牛雲直播之間進行流的管理等工做。目前已經封裝好的SDK有以下幾種,Go, NodeJS, Ruby, Python, PHP, Java,C#,其餘的語言,若是有需求能夠自行使用開放的API進行封裝,全部的API都基於HTTP協議。服務器

常規業務流程
在上面的業務模型圖中,推流客戶端在進行推流以前,必須經過客戶本身的業務服務器來獲取流的信息,而這個流的信息是客戶的業務服務器利用服務端SDK和七牛雲直播服務進行交互獲得的。網絡

常規的業務場景下,用戶在註冊客戶本身的直播服務以後,客戶業務服務器能夠利用服務端SDK發送請求到七牛雲直播服務器,建立一個流,而後保存下該流ID和用戶的對應關係。

客戶端在推流以前,會去客戶的業務服務器獲取推流信息,而這個信息就是用戶所對應的流的信息,能夠經過服務端SDK獲取。

推流SDK使用
客戶可使用PC端推流軟件,第三方推流應用或者是利用七牛的推流SDK開發的推流應用來進行推流。七牛的推流SDK集成了音視頻數據採集,美顏,推流等功能,方面客戶用來開發本身的移動推流應用。

直播服務端處理
客戶端利用七牛提供的推流SDK將流推送到七牛雲直播服務器以後,服務端會轉發RTMP協議的流給觀衆進行播放,也就是說觀衆能夠以極短的延時播放推上來的數據。另外在流通過七牛雲直播服務器以後,服務端還提供基於HTTP協議的FLV播放地址,觀衆一樣能夠播放這個地址。

直播數據落存儲
除此以外,七牛雲直播服務的最大特色就是直播流通過七牛獨有的數據處理服務,自動進行流媒體切片,而後把切片數據存放到對象存儲系統中。這個也是爲了知足目前政策上的須要。自動落存儲的切片均可以設置一個默認的過時時間,在過時以後,系統會自動刪除應用空間中的數據,這個也是爲了從客戶角度考慮,節約存儲空間,以節約成本。若是客戶有永久存儲切片數據的需求,能夠利用服務端的SDK進行另存爲操做,只須要指定起始時間和結束時間就能夠保存這個時間段內的全部切片數據,並生成一個M3U8的播放地址,供客戶提供回放使用。

直播回看服務
因爲每一個直播應用空間都設置了一個切片數據過時時間,而有些客戶須要使用到直播回放的功能,這個時候,咱們能夠針對那些須要進行回放的數據,調用服務端的SDK中提供的saveas功能來將這段直播數據持久化下來,並提供一個m3u8的播放列表。

另外,若是客戶但願獲得的是諸如mp4之類的點播文件,還能夠繼續調用saveas接口,把m3u8的播放列表轉換爲單獨的點播文件。

在咱們正式開始接入直播服務以前,咱們先了解下七牛雲直播服務使用以前,須要瞭解的基本概念。

應用名(HUB)
七牛雲直播服務開通的時候,都會要求提供一個HUB名稱,這個名稱是一個邏輯上的單位,是一組流的集合名稱,你能夠在這個HUB下面建立不受限制數量的流,另外每個HUB其實後臺都對應一個對象存儲空間,用來存儲切片數據。通常狀況下,HUB的名稱就是APP應用的名稱,這樣對應起來很直觀。直播應用名的格式必須是4到100字符,英文數字以及-_組成。

直播自定義域名
七牛雲直播服務開通的時候,都會要求提供一個自定義域名,而後建立應用成功以後會給出一組域名的CNAME目標要求設置。這裏每一個域名對應了一個場景的服務。

直播相關域名 描述
pili-publish.example.com RTMP直播推流域名
pili-live-rtmp.example.com RTMP直播播放域名-直播觀看
pili-live-hdl.example.com HTTP FLV直播播放域名-直播觀看
pili-live-hls.example.com HTTP HLS直播播放域名-直播觀看
pili-playback.example.com HTTP HLS 流媒體M3U8訪問域名-直播回看
pili-media.example.com HTTP HLS 流媒體切片訪問域名-直播回看
pili-vod.example.com 直播轉存MP4等點播文件的訪問域名
pili-static.example.com 直播流截圖文件的訪問域名

其中 example.com 就是必須提供的備案域名,它能夠是一個二級域名或者主域名均可以。上面的域名根據須要進行CNAME設置。

直播服務端SDK功能

項目 方法 狀態
建立流 hub->createStream() 支持
獲取推流信息 hub->getStream(); stream->toJSONString() 支持
獲取流列表 hub->listStream() 支持
更新流信息 stream->update() 支持
禁用流 stream->disable() 支持
啓用流 stream->enable() 支持
刪除流 stream->delete() 支持
獲取流狀態 stream->status() 支持
獲取RTMP推流地址 stream->rtmpPublishUrl() 支持
獲取RTMP播放地址 stream->rtmpLiveUrls() 支持
獲取HLS直播播放地址 stream-> hlsLiveUrls() 支持
獲取FLV直播播放地址 stream-> httpFlvLiveUrls 支持
獲取HLS回放地址 stream->hlsPlaybackUrls() 支持
獲取流TS片斷文件列表 stream->segments() 支持
將一段流另存爲文件,如mp4 stream->saveAs() 支持
從流中截取圖片 stream->snapshot() 支持

目前服務端的流管理SDK支持主流的編程語言:

語言 SDK連接
Java https://github.com/pili-engineering/pili-sdk-java
Nodejs https://github.com/pili-engineering/pili-sdk-nodejs
Python https://github.com/pili-engineering/pili-sdk-python
PHP https://github.com/pili-engineering/pili-sdk-php
Ruby https://github.com/pili-engineering/pili-sdk-ruby
Go https://github.com/pili-engineering/pili-sdk-go
C# https://github.com/pili-engineering/pili-sdk-csharp

客戶端推流和播放SDK

系統 SDK連接
Android推流 https://github.com/pili-engineering/PLDroidCameraStreaming
iOS推流 https://github.com/pili-engineering/PLCameraStreamingKit
Android播放 https://github.com/pili-engineering/PLDroidPlayer
iOS播放 https://github.com/pili-engineering/PLPlayerKit
相關文章
相關標籤/搜索