Saat ini saya mengembangkan streaming online dari 3 kamera miniDV yang terhubung melalui FireWire, yang sangat mirip dengan kebutuhan Anda.
Petunjuk cepat: vlc + flowplayer / pemain jw
Pertama-tama, ada dua format video, yang dapat Anda gunakan dalam streaming online: FLV dan h264. FLV lebih mudah untuk transcode, h264 memiliki ukuran / kualitas rasio yang lebih baik tetapi transcoding jauh lebih memakan cpu. Keduanya dapat ditampilkan oleh pemain flash di halaman web.
Kedua, infrastruktur streaming. Karena bandwidth Anda dari laptop terbatas (beberapa Mbps puncak), Anda perlu melakukan streaming ke server Anda dan mengembalikannya ke klien. Jadi aliran akan mengalir 1 kali ke server dan kemudian N kali ke klien dari sana. Anda belum mendeskripsikan koneksi internet Anda untuk laptop Anda, jadi skenario ini dibagi menjadi dua bagian:
Laptop terhubung dengan alamat IP publik ATAU Anda dapat port NAT ke laptop . Skenario ini jauh lebih mudah, karena Anda dapat terhubung dari server ke laptop yang bagus dan mudah. Kerugian besar adalah, bahwa Anda terikat pada satu lokasi (satu alamat IP).
Laptop tidak terhubung dengan alamat publik saya . Ini sedikit rumit, tetapi akan bekerja dari jaringan apa pun yang memungkinkan Anda untuk SSH ke server Anda dan memiliki unggahan yang memadai (1 Mbps harus melakukannya).
Terlepas dari skenario yang digunakan, infrastruktur akan terlihat seperti ini
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Streaming dari laptop
Tangkap video dari webcam . Saya tidak pernah menangkap aliran dari webcam yang terpasang secara lokal, tetapi ada banyak contoh bagaimana melakukannya melalui V4L, misalnya:
Pengaturan Webcam . Satu-satunya bagian yang harus Anda minati adalah:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Yang merupakan bagian pertama dari perintah VLC untuk terhubung ke webcam. Untuk lebih jelasnya ikuti HOWTO yang disebutkan. Terutama melihat bagian "grup video" dan perbaiki jalur perangkat ke / dev / video dan / dev / audio. Itu bisa berbeda di laptop Anda.
Transcode video ke FLV . Saya pribadi menggunakan FLV, karena kurang menuntut CPU. String transcode yang saya gunakan adalah ini:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Yang akan mentranskode streaming video ke format FLV dengan audio MPGA (MP3 tidak tersedia di Ubuntu saya). Samplerate entah bagaimana wajib, itu tidak akan berfungsi tanpanya. Tetapi Anda dapat memilih yang lebih kecil, seperti 22050. Ini akan mentranskode streaming video 'apa adanya', sehingga skalanya adalah 1: 1. Anda dapat menambahkan parameter lebar dan tinggi, atau bahkan parameter skala. Lihatlah ke dokumentasi VLC.
Streaming dari laptop . Sekarang Anda harus membuat aliran lokal, di mana server akan terhubung:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Ini akan mengikat aliran VLC ke 0.0.0.0:8081/stream.flv. Seluruh perintah akan terlihat seperti ini:
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}'
Restreaming di server
Abadikan streaming di server dan nyalakan kembali . Sekali lagi, kami menggunakan VLC untuk menangkap dan streaming. Penggunaan didasarkan pada skenario infrastruktur sejak awal posting ini. Seperti yang saya tunjukkan, VLC pada laptop mengalirkan video pada beberapa port. Port ini harus dapat diakses dari server. Jika Anda memiliki alamat IP publik laptop, atau port NATed, Anda dapat mengujinya dengan telnet:
server$ telnet public_ip_address 8081
Apa pun kecuali "batas waktu koneksi" akan mengungkapkan, bahwa Anda dapat terhubung ke aliran laptop Anda. Jika Anda tidak memiliki alamat IP publik, atau Anda tidak dapat port NAT, Anda harus melakukannya sebaliknya. Anda dapat SSH dari laptop ke server dan remote forward port laptop Anda ke server. Perintah SSH yang benar adalah:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Perintah ajaib ini akan 'mengikat' port laptop Anda 8081, ke port server 8081. Itu berarti ketika Anda terhubung pada server ke 8081, Anda akan secara diam-diam terhubung ke port laptop 8081 Anda melalui terowongan SSH. Keren, ya? :) Jadi yang harus kita lakukan hanyalah menghubungkan dan streaming VLC sederhana:
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}'
Atau dalam hal alamat IP publik atau port 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}'
Seperti pada bagian laptop, VLC Anda di server terikat ke port 8082. Mengapa 8082 dan bukan 8081? 8081 sudah diambil oleh SSH remote forward. Mengapa kita tidak menggunakan bagian transcode seperti pada contoh pertama? Video sudah dalam format yang benar, jadi yang harus kita lakukan hanyalah streaming apa adanya.
Pengujian . Dalam kedua contoh, Anda dapat menguji fungsionalitas dengan melihat streaming melalui VLC. Anda dapat menguji aliran lokal Anda:
laptop$ vlc http://localhost:8081/stream.flv
Dan Anda dapat menguji aliran server Anda:
laptop$ vlc http://server_ip_address:8082/stream.flv
Dalam kedua kasus, Anda akan melihat input webcam Anda.
Tampilkan aliran di web
Menampilkan aliran di web, yang akan berfungsi dalam banyak kasus, adalah melalui flash player. Saya mencoba dua produk, yang gratis untuk penggunaan non-komersial: JW Player dan Flowplayer . Saya tetap menggunakan Flowplayer, tetapi saya tidak ingat alasannya, mungkin karena plugin (yang tidak saya gunakan :)) atau karena dokumentasi yang lebih baik.
Cara menampilkan aliran FLV dari VLC di halaman web tercakup di sini: Streaming VLC ke Situs web dengan asf dan Flash
Penyelesaian masalah
Waspadai banyak masalah yang AKAN timbul. Hal pertama, seperti dalam segala hal, baca . VLC adalah program yang sangat cerewet, jadi itu akan memberi tahu Anda di mana masalahnya. Bisa jadi masalah dengan izin untuk mengakses perangkat video / audio, codec yang hilang, parameter ejaan yang salah, ... Belajar menggunakan iftop
untuk melihat apakah data benar-benar mengalir melalui jaringan, dll.