流媒体视频直播方案
流媒體視頻直播方案
背景在視頻直播領(lǐng)域,有不同的商家提供各種的商業(yè)解決方案,包括軟硬件設(shè)備,攝像機(jī),編碼器,流媒體服務(wù)器等。本文講解如何使用一系列免費(fèi)工具,打造一套視頻直播方案。
視頻直播方案的組成,可以分為4部分:
1)前端采集編碼設(shè)備:提供直播信號(hào)源的采集和編碼壓縮功能,并將信號(hào)推送到直播流媒體服務(wù)器上。?
2)直播流媒體服務(wù)器:負(fù)責(zé)直播流的發(fā)布和轉(zhuǎn)播分發(fā)功能。?
3)WEB服務(wù)器:實(shí)現(xiàn)直播節(jié)目在終端上的展現(xiàn)。
4)終端設(shè)備:包括PC和移動(dòng)終端。
本文的操作基于Mac系統(tǒng),由于使用的是跨平臺(tái)的工具,因此前端的數(shù)據(jù)采集和編碼操作在其他平臺(tái)上類(lèi)似。
編碼和協(xié)議?
1)網(wǎng)絡(luò)協(xié)議:主要有3種?
?? a. RTSP(Real Time Streaming Protocol)是用來(lái)控制聲音或影像的多媒體串流協(xié)議, 由Real Networks和Netscape共同提出的;?
?? b. RTMP(Real Time Messaging Protocol):實(shí)時(shí)消息傳送協(xié)議是Adobe公司為Flash播放器和服務(wù)器之間音頻、視頻和數(shù)據(jù)傳輸 開(kāi)發(fā)的開(kāi)放協(xié)議;?
?? c. HLS(HTTP Live Streaming):是蘋(píng)果公司(Apple Inc.)實(shí)現(xiàn)的基于HTTP的流媒體傳輸協(xié)議;?
2)視頻編碼: Mpeg4, H264等?
3)音頻編碼: Mp3, AAC等?
4)視頻分辨率: 標(biāo)清通常指的是640×480(或768×480);高清指的是1280×720;全高清指的是1920×1080;超高清3840×2160?
前端數(shù)據(jù)采集和編碼: 編碼器有很多選擇,如商業(yè)版的envivio, 免費(fèi)版的ffmpeg. 我們使用ffmpeg(Mac系統(tǒng)上內(nèi)置)從Mac筆記本攝像頭捕捉視頻,視頻編碼選擇h264, 音頻編碼選擇mp3,且將生成的傳輸流ts發(fā)布到服務(wù)器。 在mac終端下,執(zhí)行:?
?./ffmpeg -f avfoundation -i "0" -vcodec libx264 -preset ultrafast -acodec libmp3lame ?-f flv rtmp://192.168.1.100:1935/myapp/stream?
服務(wù)器地址:“rtmp://192.168.1.100:1935/myapp/stream”,我們接下來(lái)進(jìn)行搭建。
服務(wù)器 流媒體服務(wù)器也有諸多選擇,如商業(yè)版的Wowza。 我們選擇的是Nginx,它是優(yōu)秀的免費(fèi)Web服務(wù)器,通過(guò)擴(kuò)展的nginx-rtmp模塊,可以支持流媒體播放和管理。 nginx-rtmp模塊特點(diǎn)是: RTMP/HLS/MPEG-DASH live streaming RTMP Video on demand FLV/MP4, playing from local filesystem or HTTP Stream relay support for distributed streaming: push & pull models Recording streams in multiple FLVs H264/AAC support Online transcoding with FFmpeg HTTP callbacks (publish/play/record/update etc) Running external programs on certain events (exec) HTTP control module for recording audio/video and dropping clients Advanced buffering techniques to keep memory allocations at a minimum level for faster streaming and low memory footprint Proved to work with Wirecast, FMS, Wowza, JWPlayer, FlowPlayer, StrobeMediaPlayback, ffmpeg, avconv, rtmpdump, flvstreamer and many more Statistics in XML/XSL in machine- & human- readable form Linux/FreeBSD/MacOS/Windows 基于它對(duì)RTMP協(xié)議的良好支持,因此本文以RTMP協(xié)議為例,配置服務(wù)器環(huán)境。 服務(wù)器搭建主要步驟:?
?? ??
(1)下載與安裝?
cd /usr/build?
git clone git://github.com/arut/nginx-rtmp-module.git?
wget?http://nginx.org/download/nginx-1.2.4.tar.gz?tar xzf nginx-1.2.4.tar.gz?
cd nginx-1.2.4?
./configure --add-module=/usr/build/nginx-rtmp-module?
make?
make install?
(2)配置實(shí)時(shí)直播:?
要支持RTMP,需要在nginx.conf (PREFIX/conf/nginx.conf)中添加rtmp{} 部分,如下:?
復(fù)制代碼 rtmp {server {listen 1935;ping 30s;notify_method get;application myapp {live on; }} }
客戶(hù)端 使用VLC來(lái)訪問(wèn)視頻服務(wù)器,觀看視頻。 VLC也是跨平臺(tái)的軟件,在Mac, windows終端都有不同版本。?
選擇 File/Open Network, 播放地址: rtmp://192.168.1.100:1935/myapp/stream. 即可觀看實(shí)時(shí)視頻。 參考:?
?? ? ? Nginx官網(wǎng):?https://github.com/arut/nginx-rtmp-module/wiki/Getting-started-with-nginx-rtmp?
總結(jié)
- 上一篇: iOS视频直播学习
- 下一篇: 直播协议的选择:RTMP vs. HLS