視頻轉碼服務架構說明書

需求說明

視頻轉碼服務,具備將高碼率的視頻轉換爲低碼率的視頻,和對不同編碼格式的視頻進行轉換能力的後臺服務;

 

規格定義

性能指標:

 

吞吐量和性能指標

4核 8G 1000M網卡

GeForce GT 1030 以上顯卡

CPU 到 80%

網絡佔用率 到 70%

100路 720P 高清 2Mbps -> 640*480P 800kbps

50路 1080P 高清 4Mbps  -> 640*480P 800kbps

 

時延要求:轉碼服務對視頻播放延時需要小於3S

 

支持的協議和編碼類型:

協議類型

TCP/UDP

流媒體支持

RTP/PS/RTMP

視頻類型

H264/VP8/VP9/H265

音頻類型

AAC/OPUS/iLBC

 

架構設計

圖1.整體框圖

FFmpeg是可以進行多種格式的音頻、視頻解碼、轉換、流功能的多媒體開發框架,包含了libavcodec 用於多個項目中音頻和視頻的解碼器庫,libavformat進行音頻與視頻格式轉換庫,以及libavfilter用於做視頻水印、疊加等特效處理的filter工具。同時,FFmpeg可通過使用Nvidia的GPU加速進行視頻編解碼,根據Nvidia網站上關於硬件編碼和軟件編碼的性能對比,性能以每秒鐘編碼幀數爲參考指標,質量以PSNR爲參考指標,可看出性能方面Nvidia編碼器是x264的2~5倍,質量方面對於fast stream場景來說Nvidia編碼器優於x264。

ZLMediaKit是一個基於C++11的高性能、運營級、流媒體服務框架,支持多種流媒體協議(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV),支持協議間的互相轉換,並對異步IO的網絡編程模型進行了封裝,是一個非常適合做轉碼服務器的流媒體服務框架。

線程模型

轉碼請求接收線程(監聽固定3500端口)

接收媒體包線程

轉碼線程

發送線程

日誌線程

類圖設計

轉碼請求接收線程輸入請求格式定義:

輸入請求

{“dest_ip”:11.12.112.10,

“dest_port”:9000,

“socket_protocol”:”udp”,

“transport_protocol”:”rtp”,

“source_width”:1080,

“source_height”:1920,

“source_samplerate”:2000,

“source_media_type”:”rtp”,

“source_video_codec”:”h264”,

“source_audio_codec”:”aac”,

“dest_video_codec”:”h264”,

“dest_audio_codec”:”aac”,

“dest_width”:640,

“dest_height”:480,

“dest_samplerate”:800 }

輸出

{“recv_packet_ip”:”11.12.112.10”, “recv_packet_port”:”9099”}

轉碼輸出的目的IP、端口,網絡協議, 源分辨率,源碼率, 目標分辨率, 目標碼率, 媒體類型(RTP/PS/RTMP/RTSP),視頻格式,音頻格式,目標視頻格式, 目標音頻格式

返回:監聽的轉碼服務包接收IP/端口;

業務流程圖

  1. 調用方先發送消息給視頻轉碼服務後臺的3500端口,配置轉碼相關信息,要求開始轉碼;
  2. 視頻轉碼服務接收到調用方的請求後,判斷是否具備轉碼所需要的服務能力,並將配置信息進行存儲,返回接收轉碼包的監聽IP和端口;
  3. 調用方監聽目標視頻的接收端口,並再接收到目標視頻流後,轉發給需要的客戶端,也可以在第一步直接將客戶端的IP和端口作爲參數提交給轉碼服務,調用方不需要接收轉碼完成的視頻流;
  4. 發送視頻流到轉碼服務的接收IP和端口;
  5. 將轉碼完成的視頻數據發送給接收IP和端口;
  6. 該步驟發送消息給3500端口結束轉碼

負載均衡支持

主節點和主節點之間存在心跳消息,主節點和子節點間存在心跳,子節點間不存在心跳;主節點需要負責子節點的轉碼任務分配,負責將請求轉發到子節點,存儲各子節點的任務數和吞吐量等服務器狀態信息,負責子節點間的負載均衡;主節點和子節點可以分佈式部署在不同的服務器上。具體的心跳消息和任務分配消息詳細設計中體現。

 

參考:https://it3q.com/article/49

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章