搭建直播系統(tǒng)并實(shí)現(xiàn)h5播放rtmp

推流只能用rtmp協(xié)議,拉流可以使用rtmp協(xié)議和hls協(xié)議。rtmp協(xié)議是adobe公司開(kāi)發(fā)的開(kāi)放協(xié)議,hls是蘋(píng)果公司推出的直播協(xié)議。我們使用nginx的rtmp插件來(lái)搭建推流服務(wù)器

基于nginx的rtmp直播服務(wù)器

安裝加載nginx-rtmp-module模塊的nginx

./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module.1.1.4 --with-http_ssl_module

  • make && make install 安裝

  • 配置rtmp模塊

rtmp {
server {
listen 9999;
?
application myapp {
live on;
}
application live {
live on; #開(kāi)啟實(shí)時(shí)
hls on; #開(kāi)啟hls
hls_path /usr/local/etc/nginx/html/multimedia/hls; #hls的ts切片存放路徑
hls_fragment 2s; #本地切片長(zhǎng)度
hls_playlist_length 6s; #HLS播放列表長(zhǎng)度
}
}
}

使用rtmp協(xié)議并且監(jiān)聽(tīng)了9999端口,如果我們的推流地址填寫(xiě)的是rtmp://ip:9999/myapp,那么就是純粹的rmtp協(xié)議的流,如果推流地址填寫(xiě)的是rmtp://ip:9999/live,那么推流之后會(huì)在/usr/local/etc/nginx/html/multimedia/hls目錄下生成很多ts格式的視頻切片和一個(gè)m3u8格式的文件,我們想要用http協(xié)議訪問(wèn)這個(gè)m3u8文件就需要再配置http模塊。

  • 配置http模塊

location /live {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /usr/local/etc/nginx/html/multimedia/hls/;
add_header Cache-Control no-cache;
}

當(dāng)我們的推流地址填寫(xiě)的是rtmp://ip:9999/live/room1時(shí),使用http://ip:80/live/room1.m3u8就能把rtmp轉(zhuǎn)成hls訪問(wèn)這個(gè)直播流了。

  • 新建文件夾 mkdir -p /usr/local/etc/nginx/html/multimedia/hls/

  • 重啟nginx nginx -s reload

以上就完成了直播服務(wù)器的搭建。

1594282941784.png

使用video.js在h5播放rtmp

使用obs推流,推流地址可以填寫(xiě)rtmp://ip:9999/myapp或者rtmp://ip:9999/live,如果用的是rtmp://ip:9999/myapp,在h5端播放的時(shí)候會(huì)涉及到h5播放rtmp協(xié)議的問(wèn)題,h5安裝vide.js之后還要額外安裝videojs-flash插件。

video.js版本是7.8.3

安裝好之后在相關(guān)頁(yè)面引入:

import videojs from 'video.js';
import "videojs-flash"
import 'video.js/dist/video-js.css'

然后初始化videojs即可:

player = videojs("myVideo", {
poster: baseUrl + '/file/download?file_id='+that.props.videos.foreImg,
controls: true,
preload: 'auto',
// fluid:false,
fill: true,
playsinline: true,
languages: 'en',
suppressNotSupportedError: false,
sources: that.props.videos.url,
techOrder: ['flash', 'html5']
})

在pc端播放rtmp時(shí)依賴flash播放器,所以要打開(kāi)flash,這樣就解決了pc端rtmp協(xié)議直播流的問(wèn)題。

但問(wèn)題是現(xiàn)在流行的是移動(dòng)端直播,而蘋(píng)果就沒(méi)支持過(guò)flash播放器,所以目前正常方法解決不了在移動(dòng)端使用rtmp協(xié)議拉流的問(wèn)題。

移動(dòng)端使用rtmp協(xié)議拉流

因?yàn)樘O(píng)果不支持flash所以使用rtmp拉流肯定是不行的,但是可能客戶給我們的就只有rtmp協(xié)議,那么我們就可以用到上面的另外一個(gè)地址,把rtmp協(xié)議轉(zhuǎn)成hls協(xié)議。

搭建ffmpeg

rtmp轉(zhuǎn)flv

ffmpeg -re -i rtmp://ip:9999/myapp/room1
-vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://ip:9999/live/room1

這樣當(dāng)客戶給的拉流地址是rtmp://ip:9999/myapp/room1時(shí),可以用ffmpeg 轉(zhuǎn)成http://ip:9999/live/room1.m3u8實(shí)現(xiàn)全平臺(tái)播放了。

但是這樣還有個(gè)問(wèn)題,因?yàn)榭蛻艚o地址的話,用戶拉流是從客戶平臺(tái)上拉,但是如果使用自己的服務(wù)器轉(zhuǎn)了一下的話,那就變成用戶從我們自己的服務(wù)器拉流了,如果用戶比較多的話那帶寬的問(wèn)題就要考慮一下了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容