局域网直播探索
1. 背景
校內(nèi)有不少用于直播的場景,例如大劇場演出,在各個教室同步觀看;利用互聯(lián)網(wǎng)的直播方式,推送和播放端會走一次公網(wǎng)再回來,造成延遲與卡頓,因此考慮使用局域網(wǎng)直播的方式。
2. 技術(shù)選型
經(jīng)調(diào)研,采用nginx的rtmp模塊,搭建rtmp的直播服務(wù)器,實現(xiàn)局域網(wǎng)內(nèi)的直播。推送端可以直接使用obs推送,拉流的播放端,直接采用vlc播放器。此種選型的優(yōu)點如下:
3. 部署包含rtmp模塊的nignx
本次部署在mac環(huán)境下,linux環(huán)境類似。
nginx官網(wǎng)下載nginx的官方安裝包,并解壓
curl -OL https://nginx.org/download/nginx-1.20.1.tar.gz tar xzvf nginx-1.20.1.tar.gz && rm nginx-1.20.1.tar.gz準(zhǔn)備pcre和openssl兩個包用于編譯
curl -OL https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz tar xvzf pcre-8.41.tar.gz && rm pcre-8.41.tar.gz curl -OL https://www.openssl.org/source/openssl-1.1.0.tar.gz tar xvzf openssl-1.1.0.tar.gz && rm openssl-1.1.0.tar.gz下載nginx rtmp模塊源碼
git clone https://github.com/arut/nginx-rtmp-module.git編譯并安裝nginx,參數(shù)指定pcre、openssl路徑并增加rtmp模塊
cd nginx-1.20.1 ./configure --with-pcre=../pcre-8.41/ --with-http_ssl_module --with-openssl=../openssl-1.1.0 --add-module=../nginx-rtmp-module make sudo make install安裝完成后,nginx位于/usr/local/nginx/,在其conf目錄下,修改nginx.conf的配置文件,在原有的events配置下方增加rtmp的配置。如果不需要開啟默認(rèn)的http服務(wù),則可以注釋掉默認(rèn)開啟的80端口的配置,即http配置下server的全部配置。去掉注釋的nginx.conf完整配置如下:
worker_processes 1;events {worker_connections 1024; }rtmp {server {listen 1935;chunk_size 4000;application bndsly {live on;}} }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;# 這里會從conf下的servers文件夾讀取http服務(wù)的配置,如有http服務(wù),建議采用此種方式# include servers/*.conf; }啟動nginx即可
sudo /usr/local/nginx/sbin/nginx4. 推流
推流就是把一個視頻源推送到rtmp的服務(wù)器。
obs推流的配置可以參考,例如rtmp://192.168.50.9:1935/bndsly/test
5. 播放
6. 使用ffmpeg做局域網(wǎng)上課直播等場景
在有攝像頭的電腦上,如果打算用當(dāng)前桌面和攝像頭做一場直播分享。可以在電腦上安裝ffmpeg,以mac電腦為例。注意:推流還是建議使用obs,ffmpeg推流對電腦配置有一定的要求,否則會卡。
安裝ffmpeg軟件
brew install ffmpeg可使用下面的命令,將本地視頻推送的rtmp服務(wù)器
ffmpeg -re -i /Volumes/龍樾電影派/電視劇/韓劇/機智醫(yī)生生活.Hospital.Playlist.EP01-EP12.2020.HD1080P/機智醫(yī)生生活.Hospital.Playlist.EP01.1080P.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.50.9:1935/bndsly/mp4使用下面命令,查看本地可用的設(shè)備
ffmpeg -f avfoundation -list_devices true -i ""可能的輸出如下:
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developersbuilt with Apple clang version 12.0.5 (clang-1205.0.22.9)configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/4.4_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolboxlibavutil 56. 70.100 / 56. 70.100libavcodec 58.134.100 / 58.134.100libavformat 58. 76.100 / 58. 76.100libavdevice 58. 13.100 / 58. 13.100libavfilter 7.110.100 / 7.110.100libavresample 4. 0. 0 / 4. 0. 0libswscale 5. 9.100 / 5. 9.100libswresample 3. 9.100 / 3. 9.100libpostproc 55. 9.100 / 55. 9.100 [AVFoundation indev @ 0x14e72de60] AVFoundation video devices: [AVFoundation indev @ 0x14e72de60] [0] FaceTime HD Camera [AVFoundation indev @ 0x14e72de60] [1] Capture screen 0 [AVFoundation indev @ 0x14e72de60] [2] Capture screen 1 [AVFoundation indev @ 0x14e72de60] AVFoundation audio devices: [AVFoundation indev @ 0x14e72de60] [0] MacBook Pro麥克風(fēng)可以使用如下命令,將本地桌面和麥克風(fēng)推送到rtmp服務(wù)器
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -f flv rtmp://192.168.50.9:1935/bndsly/class如果要加上攝像頭,則可以使用如下命令(對推流的電腦有一定的配置要求,否則會卡):
ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://192.168.50.9:1935/bndsly/class總結(jié)
- 上一篇: 详解GBase 8c数据库安全之数据透明
- 下一篇: Mongo系列之update