Tôi hiện đang phát triển phát trực tuyến từ 3 camera miniDV được kết nối qua FireWire, khá giống với nhu cầu của bạn.
Gợi ý nhanh: vlc + Flowplayer / jw player
Trước hết, có hai định dạng video mà bạn có thể sử dụng trong phát trực tuyến: FLV và h264. FLV dễ dàng hơn để chuyển mã, h264 có tỷ lệ kích thước / chất lượng tốt hơn nhưng việc chuyển mã lại tốn nhiều cpu hơn. Cả hai có thể được hiển thị bởi các trình phát flash trong trang web.
Thứ hai, cơ sở hạ tầng phát trực tuyến. Vì băng thông của bạn từ máy tính xách tay bị hạn chế (vài Mbps đứng đầu), bạn cần truyền phát đến máy chủ của mình và gửi lại cho khách hàng. Vì vậy, luồng sẽ chảy 1 lần đến máy chủ và sau đó N lần đến máy khách từ đó. Bạn chưa mô tả kết nối internet cho máy tính xách tay của mình, vì vậy kịch bản được chia thành hai phần:
Máy tính xách tay được kết nối với địa chỉ IP công cộng HOẶC bạn có thể chuyển NAT sang máy tính xách tay . Kịch bản này dễ dàng hơn nhiều, vì bạn có thể kết nối từ máy chủ đến máy tính xách tay đẹp và dễ dàng. Bất lợi lớn là, bạn bị ràng buộc vào một địa điểm (một địa chỉ IP).
Máy tính xách tay không được kết nối với địa chỉ công cộng . Điều này hơi khó một chút, nhưng sẽ hoạt động từ bất kỳ mạng nào cho phép bạn SSH đến máy chủ của mình và tải lên hiệu quả (1 Mbps nên làm điều đó).
Bất kể kịch bản được sử dụng, cơ sở hạ tầng sẽ trông như thế này
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Truyền phát từ máy tính xách tay
Quay video từ webcam . Tôi chưa bao giờ bắt được luồng từ webcam đính kèm cục bộ, nhưng có nhiều ví dụ về cách thực hiện thông qua V4L, ví dụ:
Cài đặt webcam . Phần duy nhất mà bạn nên quan tâm là:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Đó là phần đầu tiên của lệnh VLC để kết nối với webcam. Để biết thêm chi tiết, hãy làm theo hướng dẫn đã đề cập. Đặc biệt nhìn vào phần "nhóm video" và đường dẫn thiết bị chính xác đến / dev / video và / dev / audio. Những người có thể khác nhau trên máy tính xách tay của bạn.
Chuyển mã video sang FLV . Cá nhân tôi sử dụng FLV, vì nó ít đòi hỏi CPU hơn. Chuỗi chuyển mã tôi sử dụng là thế này:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Điều này sẽ chuyển mã luồng video sang định dạng FLV với âm thanh MPGA (MP3 không có sẵn trong Ubuntu của tôi). Sampl Cả bằng cách nào đó là bắt buộc, nó sẽ không hoạt động mà không có nó. Nhưng bạn có thể chọn nhỏ hơn, như 22050. Điều này sẽ chuyển mã luồng video 'như hiện tại', vì vậy tỷ lệ là 1: 1. Bạn có thể nối các tham số chiều rộng và chiều cao, hoặc thậm chí tham số tỷ lệ. Nhìn vào tài liệu VLC.
Truyền phát nó từ máy tính xách tay . Bây giờ bạn phải tạo luồng cục bộ, trên đó máy chủ sẽ kết nối:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Điều này sẽ liên kết luồng VLC với 0.0.0.0:8081/stream.flv. Toàn bộ lệnh sẽ trông như thế này:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'
Đang phát lại trên máy chủ
Bắt luồng trên máy chủ và phát lại nó . Một lần nữa, chúng tôi sử dụng VLC để chụp và truyền phát. Việc sử dụng dựa trên kịch bản cơ sở hạ tầng từ đầu bài này. Như tôi đã trình bày, VLC trên máy tính xách tay truyền phát video trên một số cổng. Cổng này phải được tích lũy từ máy chủ. Nếu bạn có địa chỉ IP công cộng của máy tính xách tay hoặc cổng NATed, bạn có thể kiểm tra nó bằng telnet:
server$ telnet public_ip_address 8081
Bất cứ điều gì ngoại trừ "hết thời gian kết nối" sẽ tiết lộ rằng bạn có thể kết nối với luồng máy tính xách tay của mình. Nếu bạn không có địa chỉ IP công cộng hoặc bạn không thể chuyển sang cổng NAT, bạn phải thực hiện theo cách khác. Bạn có thể SSH từ máy tính xách tay đến máy chủ và từ xa chuyển tiếp cổng máy tính xách tay của bạn đến máy chủ. Lệnh SSH chính xác sẽ là:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Lệnh ma thuật này sẽ 'liên kết' cổng máy tính xách tay 8081 của bạn, với cổng máy chủ 8081. Điều đó có nghĩa là khi bạn kết nối trên máy chủ với 8081, bạn sẽ âm thầm kết nối với cổng máy tính xách tay 8081 qua đường hầm SSH. Thật tuyệt phải không? :) Vì vậy, tất cả những gì chúng ta phải làm là kết nối và truyền phát VLC đơn giản:
server$ vlc http://localhost:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Hoặc trong trường hợp với địa chỉ IP công cộng hoặc cổng NATed:
server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Như trong phần máy tính xách tay, VLC trên máy chủ của bạn được liên kết với cổng 8082. Tại sao 8082 mà không phải 8081? 8081 đã được thực hiện bởi SSH từ xa chuyển tiếp. Tại sao chúng ta không sử dụng phần chuyển mã như trong ví dụ đầu tiên? Video đã có định dạng đúng, vì vậy tất cả những gì chúng ta phải làm chỉ là phát trực tiếp.
Kiểm tra . Trong cả hai ví dụ, bạn có thể kiểm tra chức năng bằng cách xem luồng qua VLC. Bạn có thể kiểm tra luồng cục bộ của mình:
laptop$ vlc http://localhost:8081/stream.flv
Và bạn có thể kiểm tra luồng máy chủ của mình:
laptop$ vlc http://server_ip_address:8082/stream.flv
Trong cả hai trường hợp, bạn sẽ thấy đầu vào webcam của bạn.
Hiển thị luồng trên web
Hiển thị luồng trên web, sẽ hoạt động trong hầu hết các trường hợp, là thông qua trình phát flash. Tôi đã thử hai sản phẩm miễn phí cho mục đích phi thương mại: JW Player và Flowplayer . Tôi đã ở lại với Flowplayer, nhưng tôi không nhớ lý do, có thể là do các plugin (mà tôi không sử dụng :)) hoặc vì tài liệu tốt hơn.
Cách hiển thị luồng FLV từ VLC trong trang web được trình bày ở đây: Truyền phát VLC sang trang web với asf và Flash
Xử lý sự cố
Hãy nhận biết nhiều vấn đề mà SILL phát sinh. Điều đầu tiên, như trong tất cả mọi thứ, đọc . VLC là chương trình rất trò chuyện, vì vậy nó sẽ cho bạn biết vấn đề ở đâu. Có thể có vấn đề với quyền truy cập vào thiết bị video / âm thanh, thiếu codec, sai chính tả - thông số xuất hiện, ... Tìm hiểu cách sử dụng iftop
để xem liệu dữ liệu có thực sự chảy qua mạng, v.v.