Nhận độ trễ giống như webrtc với ffmpeg?


11

Tôi đã sử dụng điều này giữa Chrome và điện thoại của tôi:

http://www.webrtc.org/demo

Và độ trễ thực sự tốt - chưa đến 1 giây.

Tôi đã cố gắng sao chép nó trên máy tính của tôi nhưng không thành công.

ffmpeg -f video4linux2 -i /dev/video0  -s 320x200 -r 50 -deadline realtime -vcodec libvpx -f webm -fflags nobuffer udp://10.0.0.55:9002

Và sau đó sử dụng ffplay ở phía bên kia.

Nó vẫn còn một vài giây chậm trễ với nó.

Cuối cùng, tôi muốn phát trực tiếp từ máy tính của mình sang điện thoại Android, nhưng độ trễ đã trở nên tốt.

Chỉnh sửa - điều này hoạt động tốt hơn đáng kể. Nếu tôi có thể cạo sạch một chút về điều này, tôi sẽ rất vui:

ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0  -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002

1
Liên kết đã chết. Về cơ bản bạn muốn chuyển đổi video và truyền phát nó đến điện thoại của bạn? Trên wifi hay ngoài?
jiggunjer

Những gì tôi muốn làm là truyền phát từ camera gắn vào thiết bị và để nó hiển thị trên máy tính bảng Android (Nexus 10) được kết nối qua USB.
David N. Welton

1
Tôi không biết nhiều về các codec này nhưng bạn đã kiểm tra xem chúng có được tăng tốc phần cứng không? Đó sẽ là dự đoán của tôi về lý do tại sao bạn thấy độ trễ hơn 1 giây.
rình mò

vpx sẽ rất khó để gần với thời gian thực, tôi biết x264 có giai điệu "độ trễ thấp" hoặc một cái gì đó tương tự FWIW
rogerdpack

Câu trả lời:


1

Vấn đề chủ yếu đến từ việc bạn đang sử dụng chuyển mã phần mềm , thay vì chuyển mã phần cứng .

Theo nguyên tắc thông thường, nếu chuyển đổi sử dụng gia tốc phần cứng, độ trễ sẽ ở mức dưới một giây (thường là mili giây). Nếu nó được thực hiện trong phần mềm, thì độ trễ sẽ là thứ tự nhiều hơn một giây.

FFmpeg hỗ trợ tăng tốc phần cứng, nhưng thường rất khó để làm cho nó hoạt động cho bạn.

https://trac.ffmpeg.org/wiki/HWAccelIntro

Mặt khác, Google Chrome hỗ trợ mã hóa / giải mã phần cứng VP8 và H264 (nơi có sẵn), cả trên máy tính và điện thoại Android của bạn:

http://code.google.com.vn/p/chromium/issues/detail?id=428223


1
Nó không chỉ là về khả năng tăng tốc phần cứng mặc dù ... cấu hình codec đóng vai trò lớn hơn nhiều trong độ trễ. Bộ giải mã cần được điều chỉnh để giữ độ trễ thấp, với chi phí chất lượng và băng thông. Điều này có thể được thực hiện cho dù bạn có đang sử dụng codec tăng tốc phần cứng hay không.
Brad

Liên kết đó đặc biệt nói rằng Chrome KHÔNG hỗ trợ mã hóa phần cứng trên máy tính để bàn, CHỈ trên Android.
davr

Xin lỗi nhưng Brad đã đúng, câu trả lời hoàn toàn sai: miễn là bạn đặt cùng một cài đặt codec, sẽ không có sự khác biệt nào nếu bạn thực hiện mã hóa phần cứng hoặc phần mềm (miễn là bạn có đủ sức mạnh CPU để thực hiện mã hóa thời gian thực với cài đặt codec). Đúng là nó không chỉ về cài đặt codec video mà chủ yếu là về kiểu vận chuyển và bộ đệm của bộ giải mã. WebRTC hoạt động vì nó được điều chỉnh cho độ trễ thấp. Bộ giải mã Webm điển hình không có ý định thực hiện Độ trễ thấp
Harry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.