Làm thế nào để có được mplayer để chơi từ stdin?


7

Tại sao điều này không làm việc?

cat /dev/video1 | mplayer -

Nếu tôi có thể làm cho nó hoạt động, thì tôi có thể phát và quay video cùng lúc bằng cách sử dụng 'tee' để cung cấp cho người chơi và mencoder.

Tôi muốn phát video trực tiếp (từ / dev / video1: input = 1: Norm = NTSC) và ghi lại video cùng lúc mà không giới thiệu độ trễ.

mplayer phát video tốt (không có độ trễ đáng chú ý).

mencoder ghi lại nó tốt.

Nhưng tôi không thể tìm ra cách "phát" đầu ra từ / dev / video để tôi có thể cung cấp nó cho cả hai cùng một lúc. (Tôi biết cách mã hóa nó, sau đó ngay lập tức phát video được mã hóa, nhưng điều đó giới thiệu quá nhiều độ trễ).

Nếu mplayer và mencoder sẽ đọc từ stdin, thì tôi có thể sử dụng 'tee' để giải quyết điều này.

Tôi làm nó như thế nào?

[BTW, tôi sẽ hài lòng với BẤT CỨ giải pháp nào phát và ghi cùng một lúc, miễn là nó không thêm độ trễ - Tôi không kết hôn với người chơi. Nhưng mã hóa đầu tiên và sau đó chơi thêm độ trễ.]


Trong trường hợp của các các /dev/video0đầu vào đến từ đâu? Một máy ảnh web?
slm

/ dev / video0 là webcam tích hợp (đây là netbook). / dev / video1 là đầu vào tôi đang cố đọc (bộ điều hợp video USB; nó được kết nối với máy thu cho máy ảnh không dây)
nerdfever.com

Câu trả lời:


10

Bạn cần cung cấp cho nó một số bộ đệm khi chơi từ stdin

cat /dev/video1 | mplayer -cache 1024 -

Nếu không có tùy chọn bộ đệm đó, bạn sẽ gặp lỗi "Tìm kiếm thất bại Không thể tìm kiếm ngược trong luồng tuyến tính"


1
Nếu bạn tìm thấy điều này trên một số trang web, bạn có thể thêm tài liệu tham khảo cho nó ở đây? Mặt khác, thật khó để hiểu tại sao điều này giải quyết vấn đề của OP.
slm

Tôi đã bù cho downvote nhưng chỉ vì bạn là người mới bắt đầu ở đây. Lần tới xin vui lòng cung cấp ít nhất một công phu tối thiểu (tài liệu tham khảo, giải thích, bất cứ điều gì), xin vui lòng.
peterh - Phục hồi Monica

Tôi đã chỉnh sửa một cách rõ ràng - mplayer cần tùy chọn bộ đệm để phát lại nhiều luồng từ stdin.
Mike Redcoat

Điều này cũng giải quyết vấn đề tương tự ("Tìm kiếm thất bại Không thể tìm kiếm ngược trong luồng tuyến tính") cho hơi âm thanh http.
Rudy Matela

3

Theo trang man mplayer mplayer -nên đọc từ stdin, nhưng bạn cũng cần chỉ định -noconsolecontrolsđể ngăn mplayer cố đọc các sự kiện điều khiển bàn phím từ stdin.


Cảm ơn, nhưng điều đó dường như không có ích - xem tại đây: pastebin.com/ai78v5W1 <br /> cũng vậy, nếu tôi thử với / dev / video1 tôi nhận được "Không thể tìm kiếm ngược trong các luồng tuyến tính! Tìm kiếm thất bại" (đây là một luồng video trực tiếp )
nerdfever.com

3

Tôi không nghĩ những gì bạn muốn làm là có thể sử dụng một mplayer duy nhất. Tôi tìm thấy câu hỏi chính xác này được hỏi và dường như trả lời như vậy:

trích đoạn: [Người dùng MPlayer] Hiển thị và ghi lại luồng ip camera cùng một lúc?

Công việc này, nhưng tôi thực sự muốn thực hiện nó trong cùng một quy trình mplayer. Bất kỳ ý tưởng làm thế nào để viết một luồng trong một tập tin trong chế độ nô lệ? Tôi chưa tìm thấy lệnh đúng trong tài liệu.

Tôi nghĩ rằng nó không thể được thực hiện. MPlayer có thể phát hoặc kết xuất một luồng, không phải cả hai cùng một lúc.

Tuy nhiên, bạn có thể kết xuất một luồng với một tác vụ và phát luồng ghi âm với một tác vụ khác. Ít nhất bạn sẽ không có hai lần lưu lượng mạng.

Câu hỏi ban đầu cho câu trả lời đó là:

Tôi cần, đồng thời, để hiển thị luồng và khả năng ghi nó vào một tệp (vì vậy, ghi lại nó). Quan điểm của tôi là: Tôi muốn làm điều này là quá trình tương tự.

Trên thực tế, tôi có một quy trình cho người chơi trong chế độ nô lệ:

    $ mplayer -slave -wid id_window  camera_address/

Và mỗi lần tôi cần ghi lại, tôi bắt đầu một quy trình mới, không phải là nô lệ lần này:

    $ mplayer -dumpvideo camera_address -dumpfile stream.mp4/

Công việc này, nhưng tôi thực sự muốn thực hiện nó trong cùng một quy trình mplayer. Bất kỳ ý tưởng làm thế nào để viết một luồng trong một tập tin trong chế độ nô lệ? Tôi chưa tìm thấy lệnh đúng trong tài liệu.

Sử dụng ffmpeg?

Chỉ là một ý tưởng nhưng tôi tìm thấy bài đăng wiki này trên trang web ffmpeg thảo luận về việc tạo ra nhiều đầu ra . Có lẽ bạn có thể phân tách /dev/video1và sau đó sử dụng các luồng trùng lặp trong mplayer?


Tôi không hiểu - rằng sẽ chỉ phát luồng chứ không ghi lại. Tôi không gặp vấn đề gì khi chơi hoặc ghi âm - tôi chỉ không thể làm cả hai cùng một lúc.
nerdfever.com

@ nerdfever.com - Rất tiếc tôi không nhận ra bạn muốn ghi lại nó, hãy để tôi cập nhật điều này.
slm

Cảm ơn; Tôi biết mplayer không thể ghi và chơi cùng một lúc. Đó là lý do tại sao tôi muốn chạy 2 phiên bản (một mplayer, một mencoder) cùng một lúc, cả hai đều đọc từ cùng một thiết bị / dev / video1. Nếu tôi có thể khiến cả hai (mplayer & mencoder) đọc từ stdin, thì tôi có thể sử dụng 'tee' để nuôi cả hai. Nhưng làm thế nào để khiến họ lấy đầu vào từ stdin ngay từ đầu ?? [BTW, tôi sẽ hài lòng với BẤT CỨ giải pháp nào phát và ghi cùng một lúc, miễn là nó không thêm độ trễ.]
nerdfever.com

@ nerdfever.com - đã thêm thông tin bổ sung về ffmpeg, hãy cho tôi biết bạn nghĩ gì.
slm

Cảm ơn một lần nữa, tôi sẽ thử. Tôi đang chạy Mint (Ubuntu) vì vậy tôi sẽ phải tự biên dịch ffmpeg (họ đã chuyển sang avconv). Nếu ffmpeg có thể thực hiện một video passthru (không mã hóa) thì điều này có thể hoạt động - nếu nó khăng khăng mã hóa trước, điều đó sẽ thêm độ trễ và nó sẽ không hoạt động đối với tôi ... nhưng tôi sẽ thử.
nerdfever.com
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.