[英]ffmpeg - live video from rtsp with mp4 fragmented
我有以下設置:
我想嘗試什么:
我想從 RTSP stream 制作一個一對一的視頻 stream 到我的瀏覽器,而不保存文件(如.ts 或.m3u),但只需將原始 mp4 stream 推送到 .network 中的 HTML5 視頻標簽中。
我已經取得了一些成功,但它從來都不是一個流暢或好的視頻 stream,但總是停下來繼續。
我使用 PHP passthru()
function 來調用 ffmpeg,最后我通過管道傳輸了視頻 stream
以下是一些嘗試:
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Accept-Ranges: bytes");
header("Connection: keep-alive");
passthru("ffmpeg -rtsp_transport tcp -i \"rtsp://192.168.0.1:554/livestream/12\" -c:v copy -b:v 2M -movflags frag_keyframe+empty_moov -f mp4 pipe:");
passthru("ffmpeg -rtsp_transport tcp -i \"rtsp://192.168.0.1:554/livestream/12\" -b 1024k -minrate 1024k -bufsize 2048k -r 20 -movflags frag_keyframe+empty_moov -f mp4 pipe:");
passthru("ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.1:554/livestream/12 -r 10 -t 60 -movflags frag_keyframe -f mp4 pipe:");
遺憾的是直到現在都沒有答案。
我可以告訴你為什么不順利,因為ffmpeg需要實時轉換,這需要大量的CPU資源,passthrough -c copy不行,因為pipe相比只復制到a似乎有局限性文件。
我在我的筆記本電腦上工作,CPU 達到 90%(總體)
PU-modus(sen):32 位、64 位 Bytevolgorde:Little Endian 地址大小:39 位物理位,48 位虛擬 CPU:8 個在線 CPU's-lijst:0-7 Draden per kern:2 Kernen per voet:4 CPU -voeten:1 NUMA 節點:1 Producent-ID:GenuineIntel CPU 系列:6 Model:140 Modelnaam:第 11 代 Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
我將這些 arguments 用於 ffmpeg。
"-re",
"-rtsp_transport", "tcp",
"-max_delay", "30000000",
"-i", rtspStream,
"-g", "52",
"-movflags", "frag_keyframe+empty_moov",
"-c:v", "h264",
"-an",
"-f", "mp4",
"-y", "-"
我能給你的唯一建議是,為 Raspberry py 定制 FFMPEG 構建,啟用 Neon 優化。 這應該給它更多的權力。
https://www.codeinsideout.com/blog/pi/compile-ffmpeg/
祝你好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.