Tôi đã nhận được Pi B + và máy ảnh Pi và hiện đang cố gắng tìm cấu hình hiệu quả nhất (CPU thấp) và độ trễ thấp nhất để truyền phát video được mã hóa H.264 từ máy ảnh đến máy chủ nhà của tôi.
Tôi đã đọc như sau:
(Tất cả các liên kết sử dụng guxer-1.0 từ deb http://vontaene.de/raspbian-updates/ . main
.)
Rất nhiều đã được thực hiện trong vấn đề này trong những năm qua.
Ban đầu, chúng tôi phải chuyển đầu ra raspivid
thành gst-launch-1.0
(xem liên kết 1).
Sau đó (liên kết 2) trình điều khiển V4L2 chính thức đã được tạo, hiện đang là tiêu chuẩn và nó cho phép lấy trực tiếp dữ liệu mà không cần đường ống, chỉ sử dụng trình điều khiển (xem đặc biệt là bài đăng của Towolf »Sat Dec 07, 2013 3:34 chiều trong liên kết 2):
Người gửi (Pi): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
Người nhận: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
Nếu tôi hiểu chính xác, cả hai cách đều sử dụng GPU để thực hiện giải mã H264, nhưng cách thứ hai thì hơi hiệu quả vì nó không cần phải đi qua nhân vào lúc khác vì không có đường ống giữa các quá trình liên quan.
Bây giờ tôi có một số câu hỏi về điều này.
Đây có phải là cách gần đây nhất để có được H264 hiệu quả từ máy ảnh không? Tôi đã đọc về
gst-omx
, cho phép các đường ống dẫn dòng như thế nào... video/x-raw ! omxh264enc ! ...
. Điều này có làm gì khác với chỉ sử dụngvideo/x-h264
, hoặc thậm chí có thể hiệu quả hơn? Có gì khác biệt?Làm cách nào để tìm hiểu plugin mã hóa guxer nào thực sự được sử dụng khi tôi sử dụng
video/x-h264 ...
đường ống dẫn? Điều này dường như chỉ là xác định định dạng tôi muốn, so với các phần đường ống khác, nơi tôi đặt tên rõ ràng thành phần (mã) (nhưh264parse
hoặcfpsdisplaysink
).Trong bài trả lời này cho liên kết 1 Mikael Lepistö có đề cập "Tôi đã xóa một bộ lọc không cần thiết từ phía phát trực tuyến" , nghĩa là anh ấy đã cắt bỏ
gdppay
vàgdpdepay
. Những người đó làm gì? Tại sao họ cần? Tôi thực sự có thể lột chúng ra?Anh ta cũng đề cập rằng bằng cách chỉ định
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
các tham số choudpsrc
phía nhận, anh ta có thể bắt đầu / tiếp tục phát trực tuyến ở giữa luồng. Những cái mũ này đạt được gì, tại sao những lựa chọn cụ thể này, tôi có thể đọc thêm về chúng ở đâu?Khi tôi thực hiện những gì được đề xuất trong câu hỏi 3 và 4 (thêm
caps
, giảmgdppay
vàgdpdepay
) thì độ trễ video của tôi trở nên tồi tệ hơn nhiều (và dường như được tích lũy, độ trễ tăng theo thời gian và sau vài phút video dừng lại)! Tại sao có thể như vậy? Tôi muốn nhận được độ trễ tôi nhận được bằng lệnh ban đầu, nhưng cũng có tính năng có thể tham gia luồng bất cứ lúc nào.Tôi đã đọc rằng RTSP + RTP thường sử dụng kết hợp TCP và UDP: TCP cho các thông điệp điều khiển và những thứ khác không bị mất và UDP để truyền dữ liệu video thực tế. Trong các thiết lập ở trên, tôi thực sự đang sử dụng nó hay tôi chỉ đang sử dụng UDP? Nó hơi mờ đối với tôi cho dù người quản lý có quan tâm đến việc này hay không.
Tôi sẽ đánh giá cao bất kỳ câu trả lời cho ngay cả một trong những câu hỏi này!
cat file | grep ...
thay vì grep ... file
. Ống thêm một lớp sao chép vào và từ kernel, có thể dễ dàng đo được, đặc biệt là trên các thiết bị có băng thông bộ nhớ thấp. Nếu guxer có thể đọc từ tập tin thiết bị direcly, tại sao không sử dụng nó? Về raspivid | cvlc
đề xuất của bạn : Tôi đã sử dụng điều này trước khi tôi chuyển sang giải pháp dựa trên công cụ tìm kiếm, nó có độ trễ cao hơn tới 3 giây so với công cụ tìm kiếm (tôi không biết tại sao).
cvlc
sử dụng ~ 45%, nhưng chỉ cần chạy qua một đường ống ở tốc độ dữ liệu đó (hãy nhớ lại, đường ống không làm chậm nó ) sẽ hầu như không di chuyển kim, tôi nghĩ vậy. Thích <5%. Nó không hoàn toàn không đáng kể nếu bạn muốn làm điều này một cách hiệu quả nhất có thể ...
raspivid | cvlc
duy nhất và đó là 40-50%. Mọi người có thể trả lời tốt hơn cho một câu hỏi thách thức họ cải thiện trên một con số cụ thể. Ngay bây giờ bạn đang hỏi rất nhiều lý do tại sao, mà không giải thích tại sao mỗi lý do tại sao lại quan trọng.
|
tạo ra bất kỳ vấn đề nào trong bối cảnh này là một phần đáng kinh ngạc của BS Bạn đã thửraspivid | cvlc
phương pháp nào chưa? Tôi đã không có máy ảnh trong một thời gian dài hoặc nhiều thời gian để chơi với nó, nhưng sử dụng nó để tạo ra một luồng http (có thể xem trên linux ở đầu kia w /vlc
) có vẻ hoạt động tốt.