以下是 ffmpeg 低延遲高性能推流方案的筆記,不是系統(tǒng)性的文章,Windows 環(huán)境,不過其他系統(tǒng)也大同小異,關(guān)鍵點都在下面了,希望對大家有幫助。
- ffmpeg 關(guān)鍵命令
-c copy 的方式 CPU 占用低,但要求 RTSP 視頻源為 H264,否則大部分瀏覽器不兼容。如果不用 -c copy 則會進行轉(zhuǎn)碼,此時必須使用子碼流輸入,否則CPU占用率高。
如果一定要使用 -c copy,則可以將子碼流配置成 H264,作為輸入源。
# H5最佳方案:播放速度快、H5可以播放、CPU占用低,用子碼流(H265/H264都可以)
# 如果 -hls_wrap 無法使用,可換成 -hls_flags
ffmpeg -rtsp_transport tcp -re -i "rtsp://admin:123456@192.168.123.22:554/Streaming/Channels/102" -f hls -crf 23 -tag:v hvc1 -preset ultrafast -maxrate 1M -bufsize 300k -r 10 -g 15 -movflags +faststart -tune zerolatency -hls_time 1 -hls_list_size 5 -hls_wrap 6 -start_number 1 -hls_allow_cache 0 -threads 1 -loglevel warning -y -an "C:\demo-service\demo-nginx\html\hls\123.22.m3u8"
# 播放速度最快、CPU占用最低,但如視頻源不是265則H5無法播放
# 如果 -hls_wrap 無法使用,可換成 -hls_flags
ffmpeg -rtsp_transport tcp -re -i "rtsp://admin:123456@192.168.123.22:554/Streaming/Channels/101" -f hls -c:v copy -preset ultrafast -tune zerolatency -hls_list_size 5 -hls_wrap 6 -r 10 -an "C:\demo-service\demo-nginx\html\hls\123.27.m3u8"
# 播放速度快、H5可以播放,但CPU占用高
ffmpeg -rtsp_transport tcp -re -i "rtsp://admin:123456@192.168.123.22:554/Streaming/Channels/101" -f hls -crf 23 -preset ultrafast -maxrate 1M -bufsize 300k -r 10 -g 20 -movflags +faststart -tune zerolatency -hls_time 1 -hls_list_size 5 -hls_wrap 6 -start_number 1 -hls_allow_cache 0 -threads 1 -loglevel warning -y "C:\demo-service\demo-nginx\html\hls\123.22.m3u8"
# windows 批處理腳本: %% 轉(zhuǎn)義 %
set password=123456,.%%2F
start /B ffmpeg -rtsp_transport tcp -re -i "rtsp://admin:%password%@192.168.123.22:554/Streaming/Channels/102" -f hls -crf 23 -tag:v hvc1 -preset ultrafast -maxrate 1M -bufsize 300k -r 10 -g 15 -movflags +faststart -tune zerolatency -hls_time 1 -hls_list_size 5 -hls_wrap 6 -start_number 1 -hls_allow_cache 0 -threads 1 -loglevel warning -y -an "C:\demo-service\demo-nginx\html\hls\123.22.m3u8"
# 重連機制
ffmpeg -rtsp_transport tcp -re -i "rtsp://admin:123456@192.168.123.22:554/Streaming/Channels/102" -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_on_network_error 1 -reconnect_on_http_error 1 -reconnect_delay_max 4096 -f hls -crf 23 -tag:v hvc1 -preset ultrafast -maxrate 1M -bufsize 300k -r 10 -g 15 -movflags +faststart -tune zerolatency -hls_time 1 -hls_list_size 5 -hls_wrap 6 -start_number 1 -hls_allow_cache 0 -threads 1 -loglevel warning -y -an "C:\demo-service\demo-nginx\html\hls\123.22.m3u8"
- Nginx 配置,不需要安裝 nginx-rtmp 等擴展模塊
server {
listen 2002;
server_name www.demo.com;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias html/hls;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Headers 'Content-Type,*';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
}
}
# HTTPS server
server {
listen 2001 ssl;
server_name www.demo.com;
ssl_certificate ../cert/cert.crt;
ssl_certificate_key ../cert/cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# ssl_ciphers 123456;
# ssl_prefer_server_ciphers on;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias html/hls;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Headers 'Content-Type,*';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
}
}
- 有用的鏈接
https://videojs.com/html5-video-support/
https://developer.jwplayer.com/jwplayer/docs
https://hls-js.netlify.app/demo/