มีอินสแตนซ์ ffmpeg ที่ทำงานเป็นเซิร์ฟเวอร์บน VPS ซึ่งแปลงวิดีโอ RTSP เป็น HLS และให้บริการบนเว็บ (โดยใช้ Apache) วิดีโอ RTSP มาจากคอมพิวเตอร์ที่อื่น (ในกรณีนี้คือเมืองอื่น) ซึ่งฉันเชื่อมต่อกับกล้อง IP คอมพิวเตอร์ใช้ข้อมูล RTSP จากกล้อง IP และแปลใหม่เป็น VPS
นี่คือคำสั่ง ffmpeg ที่ฉันใช้บนคอมพิวเตอร์เครื่องนั้น
ffmpeg \
-rtsp_transport tcp \
-i rtsp://[ที่อยู่ IP ของกล้อง]:554/live \
-c:v สำเนา \
-f rtsp \
-rtsp_transport tcp \
rtsp://[ที่อยู่ IP ของ VPS]:4445/live.sdp
และนี่คือคำสั่งที่ฉันใช้บน VPS:
ffmpeg \
-rtsp_flags ฟัง \
-listen_timeout 5 \
-หมดเวลา 5000000 \
-rtsp_transport tcp \
-i rtsp://[ที่อยู่ IP ของ VPS]:4445/live.sdp \
- แผนที่ 0 \
- ธง + global_header \
-fflags +igndts \
-c:v สำเนา \
-g 0 \
-b:v 125k \
-อัตราสูงสุด 250k \
-บัฟไซส์ 500k \
-hls_time 1 \
-hls_list_size 15 \
-hls_wrap 15 \
-y /dev/shm/hls/video.m3u8
จนถึงตอนนี้ทุกอย่างทำงานได้ดี: ฉันสามารถอ่านสตรีม HLS ในเบราว์เซอร์ได้ และค่อนข้างเสถียรและรวดเร็ว ปัญหาเกิดขึ้นเมื่อการเชื่อมต่อระหว่างรีสตรีมเมอร์กับ VPS ลดลง: ฉันต้อง ssh เข้าไปใน VPS และรีสตาร์ทอินสแตนซ์ ffmpeg ด้วยตนเอง เป็นไปได้ไหมที่จะบอก ffmpeg ให้ "ผิดพลาด" (หรือเพียงแค่หยุดกระบวนการ) เมื่อไม่มีอินพุตเข้ามา -ผม
ที่อยู่ (ทางฝั่งของ VPS)? ฉันกำลังใช้สคริปต์ทุบตีที่เริ่มต้นกระบวนการใหม่โดยอัตโนมัติ เพื่อให้ได้รับการดูแล
เพื่อหลีกเลี่ยงความสับสน:
ตาม เอกสารอย่างเป็นทางการของ ffmpeg เดอะ หมดเวลา
ธงใช้ MICROSECONDS เป็นค่าและ ฟัง_หมดเวลา
ใช้เวลาวินาที ผมเห็นหลายกระทู้ที่มีคนเถียงกันเรื่องนั้น :)