Có rất nhiều diễn đàn và chủ đề về việc loại bỏ độ trễ 5 giây khi sử dụng Pi cùng với PI-Cam làm camera giám sát. Nhiều hướng dẫn cho thấy cách sử dụng vlc để mã hóa và truyền phát hình ảnh bằng giao thức RTP dẫn đến độ trễ ~ 5 giây.
Theo tôi, lý do là raspivid đang mã hóa luồng thành H264, trong khi VLC phải giải mã lại và mã hóa lại thành bất kỳ RTP nào. Dòng lệnh trông như thế này:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Phần đầu tiên cho raspivid để truyền phát video đến đầu ra tiêu chuẩn:
raspivid -w 640 -h 480 -o - -t 0
Phần sau đường ống, báo cho VLC chọn nó và giải mã nó bằng h264:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Mux-ing và demux-ing này là một nguồn tài nguyên!
Tôi đã tìm thấy các nguồn của raspicam tại github và tôi nghĩ rằng có thể thực hiện được điều gì đó trong phương thức encoder_buffer_callback (hiện tại dòng 848) để bỏ qua mã hóa. Tuy nhiên tôi không giỏi c, và không quen thuộc với mã hóa video, vì vậy tôi không biết phải bắt đầu từ đâu.
Trên Github tôi có thể thấy 330 dĩa, nhưng dường như chúng không dành riêng cho raspicam (thay vì cho toàn bộ dự án người dùng). Tôi đã bị mất khi cố gắng tìm một ngã ba loại bỏ mã hóa hoặc thực hiện một cái gì đó đơn giản hơn như mjpeg.
Ai đó có kiến thức về codec và video c có thể giúp tôi và những người dùng mê mẩn khác thoát khỏi độ trễ không? Có lẽ giải pháp đã có sẵn ở một trong những nhánh đó, nhưng tôi đã dành hàng giờ để tìm kiếm nó mà không gặp may mắn.
ps Tôi không tìm kiếm một giải pháp trình duyệt , nhưng cuối cùng tôi muốn truyền nó đến Synology, tốt nhất là sử dụng mjpeg streaming (nhưng không phải qua một trang web, thay vào đó là một luồng mjpeg tiêu chuẩn được tích hợp trong hầu hết các ip-cam thương mại). Bước đầu tiên là gettig thoát khỏi h264.