- 1 rtmp推流
- 1.1 obs
- 1.1.1 obs采集攝像頭
- 1.2 ffmpeg
- 1.2.1 ffmpeg讀取文件推送
- 1.1 obs
- 2 rtsp推流
- 2.1 ffmpeg
- 2.1.1 ffmpeg讀取文件推流
- 2.1 ffmpeg
- 3 rtmp拉流
- 3.1 vlc
- 3.2 ffmpeg
- 3.2.1 ffmpeg拉流保存文件
- 3.3 ffplay
- 3.4 mpv
- 3.5 srs提供的rtmp播放頁面(基於adobe flash技術)
- 4
http-flv
和https-flv
拉流 - 5
HLS(m3u8+ts)
拉流- 5.1 safari瀏覽器
- 5.2 vlc,ffmpeg,ffplay
- 6
http-ts
拉流 - 7 rtsp拉流
- 8 測試文件下載
(后續會補充其他客戶端的使用方式,以及其他的流媒體協議格式。)
流地址舉例:
協議 | 地址 | 協議默認端口 |
---|---|---|
rtmp推流 | rtmp://127.0.0.1:1935/live/test110 | 1935 |
rtsp推流 | rtsp://localhost:5544/live/test110 | 554 |
rtmp拉流 | rtmp://127.0.0.1:1935/live/test110 | 1935 |
http-flv拉流 | http://127.0.0.1:8080/live/test110.flv | 80 |
https-flv拉流 | https://127.0.0.1:4433/live/test110.flv | 443 |
http-ts拉流 | http://127.0.0.1:8082/live/test110.ts | 80 |
rtsp拉流 | rtsp://localhost:5544/live/test110 | 554 |
HLS(m3u8+ts)直播拉流 | http://127.0.0.1:8081/hls/test110/playlist.m3u8 | 80 |
HLS(m3u8+ts)錄制回放 | http://127.0.0.1:8081/hls/test110/record.m3u8 | 80 |
注意,如果使用默認端口,則地址中的端口可以省略,比如http://127.0.0.1:8080/live/test110.flv
變成http://127.0.0.1/live/test110.flv
1 rtmp推流
1.1 obs
上官網( https://obsproject.com/ )下載對應操作系統的二進制安裝包,並安裝。
本文以macos系統的obs 25.0.8
版本做演示,其他系統和obs版本都差不多。
1.1.1 obs采集攝像頭
- 打開obs,點擊右下角的設置按鈕
- 在彈出的窗口中,點擊左側的推流按鈕
- 右側出現推流詳情頁:
- 服務下拉框不用管,保持自定義...
- 服務器輸入框中填寫
rtmp://127.0.0.1:1935/live
- 串流密鑰輸入框中填寫
test110
- tips,串流密鑰默認是不明文顯示輸入的字符,如果怕輸出,可以點擊右側的顯示按鈕
- 點擊右下角的確認按鈕,完成設置
- 回到主界面,點擊右下角開始推流按鈕
- 底部的狀態欄顯示
LIVE,fps,kb/s
等信息,分別表示推流時長,幀率,碼率,說明推流成功
obs除了能采集攝像頭作為輸入流,還提供采集桌面,音視頻文件等功能。而且提供了很多參數都可以在圖形化界面上配置。
1.2 ffmpeg
1.2.1 ffmpeg讀取文件推送
(如何安裝ffmpeg見文末)
這里分兩種情況,一種是flv、mp4文件中的音頻本身就是AAC格式,視頻本身就是H264或H265格式,流媒體服務器本身就支持,那么ffmpeg不需要對音視頻重新編碼:
$ffmpeg -re -stream_loop -1 -i demo.flv -c:a copy -c:v copy -f flv rtmp://127.0.0.1:1935/live/test110
對其中的參數做些說明:
-re
表示按文件中音視頻流的碼率推送,如果不加,就是不控制發送速度,一次性發送給服務端了,不符合直播的特點-stream_loop -1
表示文件結束后,繼續從文件頭部循環推送的次數,-1
表示無限循環-i
表示輸入文件-c:a copy
表示音頻編碼格式不變-c:v copy
表示視頻編碼格式不變-f flv
推送rtmp流需要指定格式為flv
- 最后是rtmp推流地址
如果是mp4文件,將demo.flv
換成mp4文件名即可,比如demo.mp4
以上是比較常見的一種情況。
另一種情況,是文件中的音視頻編碼格式,流媒體服務器不支持,那么ffmpeg需要重新編碼:
$ffmpeg -re -i demo.flv -c:a aac -c:v h264 -f flv rtmp://127.0.0.1:1935/live/test110
其中,-c:a aac
表示音頻用aac編碼,-c:v h264
表示視頻用h264編碼。
2 rtsp推流
2.2 ffmpeg
2.2.1 ffmpeg讀取文件推送
ffmpeg -re -stream_loop -1 -i demo.flv -acodec copy -vcodec copy -f rtsp rtsp://localhost:5544/live/test110
另外,rtsp還支持rtp over tcp的方式推流,對應的ffmpeg命令如下:
ffmpeg -re -stream_loop -1 -i demo.flv -acodec copy -vcodec copy -rtsp_transport tcp -f rtsp rtsp://localhost:5544/live/test110
參數含義參見 1.2.1
3 rtmp拉流
原創不易,轉載請注明文章出自開源流媒體服務器lal,Github:https://github.com/q191201771/lal 官方文檔:https://pengrl.com/lal
3.1 vlc
上官網( https://www.videolan.org/vlc/ )下載對應操作系統的二進制安裝包,並安裝。
本文以macos系統的vlc 3.0.8
版本做演示,其他系統和obs版本都差不多。
- 打開vlc
- 點擊底部菜單欄中的File,再點擊Open Network...
- 在彈出的窗口中的URL輸入框中填入
rtmp://127.0.0.1:1935/live/test110
- 點擊右下角的確認按鈕,完成設置
- 開始播放直播流
3.2 ffmpeg
3.2.1 ffmpeg拉流保存文件
如何安裝ffmpeg見文末
$ffmpeg -i rtmp://127.0.0.1:1935/live/test110 -c copy test110.flv
3.3 ffplay
ffplay是ffmpeg項目中帶的一個播放器
$ffplay rtmp://127.0.0.1:1935/live/test110
3.4 mpv
上官下載二進制安裝包,安裝,然后輸入拉流地址播放,基本和vlc差不多,參考 2.1 vlc
3.5 srs提供的rtmp播放頁面(基於adobe flash技術)
打開srs提供的rtmp播放頁面:
http://ossrs.net/players/srs_player.html?app=live&stream=livestream&server=r.ossrs.net&port=1935&autostart=true&vhost=r.ossrs.net
URL輸入框中填入rtmp拉流地址,點擊播放視頻按鈕
4 http-flv
和https-flv
拉流
http-flv
拉流,對於vlc,ffmpeg,ffplay,mpv來說,和拉rtmp流是一樣的,把拉流URL從
rtmp://127.0.0.1:1935/live/test110
改成
http://127.0.0.1:8080/live/test110.flv
即可。
https-flv
拉流方式和http-flv
相同。
5 HLS(m3u8+ts)
拉流
5.1 safari瀏覽器
打開safari瀏覽器,在地址行輸入HLS拉流地址
http://127.0.0.1:8081/hls/test110/playlist.m3u8
即可。
5.2 vlc,ffmpeg,ffplay
HLS(m3u8+ts)
拉流,對於vlc,ffmpeg,ffplay來說,和拉rtmp流是一樣的,把拉流URL從
rtmp://127.0.0.1:1935/live/test110
改成
http://127.0.0.1:8081/hls/test110/playlist.m3u8
即可。
6 http-ts
拉流
http-ts
拉流,對於vlc,ffmpeg,ffplay,mpv來說,和拉rtmp流是一樣的,把拉流URL從
rtmp://127.0.0.1:1935/live/test110
改成
http://127.0.0.1:8082/live/test110.ts
即可。
7 rtsp拉流
$ffplay rtsp://localhost:5544/live/test110
$ffmpeg -i rtsp://localhost:5544/live/test110 -vcodec copy -acodec copy -f flv /tmp/test110.flv
$ffmpeg -rtsp_transport tcp -i rtsp://localhost:5544/live/test110 -vcodec copy -acodec copy -f flv /tmp/test110.flv
8 測試文件
測試文件下載地址:
https://github.com/q191201771/doc
測試文件轉換生成命令:
$ffmpeg -i wontcry.mp4 -acodec aac -vcodec h264 -r 15 -g 30 -keyint_min 30 -bf 0 -f flv wontcry.flv
# -r 15 fps幀率,表示1秒編碼15幀
# -g 30 GOP大小,也即I幀間隔,每30幀1個I幀,也即2秒1個I幀
# -keyint_min 30 最小GOP大小
# -bf 0 不使用B幀編碼
# -acodec aac 輸出文件音頻編碼使用aac
# -vcodec h264 輸出文件視頻編碼使用h264
# -i wontcry.mp4 輸入文件
# -f flv wontcryflv.flv 輸出flv文件
$ffmpeg -i wontcry.flv -acodec copy -vcodec copy -t 30 -f flv wontcry30s.flv
# -t 30 截取前30秒內容
$ffmpeg -i wontcry30s.flv -acodec aac -vcodec hevc -r 15 -g 30 -keyint_min 30 -bf 0 -preset ultrafast -x265-params "bframes=0" -f flv hevc.flv
# 轉碼成不包含B幀的265
ffmpeg安裝
- linux安裝ffmpeg
- macOS編譯金山雲ksvc ffmpeg,在rtmp flv之上支持hevc h265
- macOS編譯ffmpeg中的播放器ffplay
- macOS Catalina 10.15.1環境下編譯的ffmpeg無法運行,啟動就崩潰
原創不易,轉載請注明文章出自開源流媒體服務器lal,Github:https://github.com/q191201771/lal 官方文檔:https://pengrl.com/lal
yoko, 20210206