Şu anda FireWire ile bağlanmış 3 miniDV kameradan çevrimiçi akış geliştiriyorum.
Hızlı ipucu: vlc + flowplayer / jw player
Öncelikle, çevrimiçi akışta kullanabileceğiniz iki video formatı vardır: FLV ve h264. FLV'nin dönüştürülmesi kolaydır, h264 daha iyi boyut / kalite oranına sahiptir, ancak kod dönüştürme çok daha fazla işlemci gerektirir. Her ikisi de web sayfasında flash playerlar tarafından görüntülenebilir.
İkincisi, akış altyapısı. Dizüstü bilgisayarınızdan gelen bant genişliğiniz sınırlı olduğundan (birkaç Mbps en fazla) sunucunuza akış sağlamanız ve istemcilere yeniden göndermeniz gerekir. Böylece akış, sunucuya 1 kez, ardından da müşterilere N kez oradan akacak. Dizüstü bilgisayarınız için internet bağlantınızı tanımlamamışsınız, bu nedenle senaryo iki bölüme ayrılmıştır:
Dizüstü, genel IP adresi ile bağlanır VEYA dizüstü bilgisayar için NAT portunu bağlayabilirsiniz . Sunucudan dizüstü bilgisayara hoş ve kolay bağlanabildiğiniz için bu senaryo çok daha kolaydır. Büyük dezavantaj, bir yere bağlı olmanız (bir IP adresi).
Dizüstü halka açık adrese bağlı değil . Bu biraz zor, ancak sunucunuza SSH vermenize izin verecek ve yeterli yükleme yapacak herhangi bir ağdan çalışacaktır (1 Mbps gerekir).
Kullanılan senaryoya bakılmaksızın, altyapı bu gibi görünecektir
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Dizüstü bilgisayardan akış
Web kamerasından video çekin . Yerel olarak bağlı olan web kameralarından hiç akış almadım, ancak V4L ile nasıl yapılacağına dair pek çok örnek var, örneğin:
Web Kamerası Kurulumu . İlgilenmeniz gereken tek şey:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Hangi web kamerasına bağlanmak için VLC komutunun ilk kısmı. Daha fazla ayrıntı için bu NASIL belgesini izleyin. Özellikle "video grubu" bölümüne bakın ve / dev / video ve / dev / audio aygıt yolunu düzeltin. Bunlar dizüstü bilgisayarınızda farklı olabilir.
Videoyu FLV'ye dönüştürün . Kişisel olarak FLV'yi kullanıyorum, çünkü daha az CPU gerektiriyor. Kullandığım transcode string:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
MPGA ses ile video akışını FLV formatına dönüştürecek (MP3 benim Ubuntu'mda mevcut değil). Samplerate bir şekilde zorunlu, onsuz çalışmayacak. Ancak, 22050 gibi daha küçük olanı seçebilirsiniz. Bu, video akışını 'olduğu gibi' dönüştürür, bu nedenle ölçek 1: 1'dir. Genişlik ve yükseklik parametrelerini, hatta ölçek parametresini ekleyebilirsiniz. VLC belgelerine bakın.
Dizüstü bilgisayardan aktar . Şimdi, sunucunun bağlanacağı yerel akışı oluşturmalısınız:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Bu VLC akışını 0.0.0.0:8081/stream.flv'ye bağlar. Bütün komut şöyle görünecek:
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}'
Sunucuda dinleniyor
Sunucudaki akışı yakalayın ve yeniden başlatın . Yine, yakalamak ve akış için VLC kullanıyoruz. Kullanım, bu yazının başından itibaren altyapı senaryosuna dayanmaktadır. Gösterdiğim gibi, dizüstü bilgisayarda VLC bazı bağlantı noktalarında video yayınlıyor. Bu portun sunucudan kabul edilebilir olması gerekir. Genel IP adresinin dizüstü bilgisayarı veya NATed bağlantı noktanız varsa, telnet ile test edebilirsiniz:
server$ telnet public_ip_address 8081
"Bağlantı zaman aşımı" dışında herhangi bir şey, dizüstü bilgisayarınızın akışına bağlanabileceğinizi gösterir. Genel IP adresiniz yoksa veya NAT portu yoksa, tam tersi şekilde yapmalısınız. Dizüstü bilgisayarınızdan sunucuya SSH ayarlayabilir ve dizüstü bilgisayar bağlantı noktanızı sunucuya uzaktan iletebilirsiniz. Doğru SSH komutu şöyle olacaktır:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Bu sihirli komut, 8081 numaralı dizüstü bilgisayar bağlantı noktanızı, 8081 numaralı sunucu bağlantı noktasına 'bağlar'. Bu, sunucuyu 8081'e bağladığınızda, SSH tüneli üzerinden sessizce dizüstü bilgisayarınızın 8081 numaralı bağlantı noktasına bağlanacağınız anlamına gelir. Güzel, ha? :) Yani tek yapmamız gereken basit VLC bağlantısı ve akışı:
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}'
Ya da halka açık IP adresi veya NATed port varsa:
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}'
Dizüstü bilgisayardaki gibi, VLC sunucunuz da 8082 numaralı bağlantı noktasına bağlanır. Neden 8082 değil 8081? 8081 zaten SSH uzaktan kumandası tarafından alındı. Neden ilk örnekte olduğu gibi transcode kısmını kullanmıyoruz? Video zaten doğru biçimde, bu nedenle tek yapmamız gereken onu olduğu gibi oynatmak.
Test etmek . Her iki örnekte de VLC üzerinden akışları görüntüleyerek işlevselliği test edebilirsiniz. Yerel akışınızı test edebilirsiniz:
laptop$ vlc http://localhost:8081/stream.flv
Ve sunucunuzun akışını test edebilirsiniz:
laptop$ vlc http://server_ip_address:8082/stream.flv
Her iki durumda da, web kamerası girişinizi görmelisiniz.
Web’deki akışı görüntüle
Çoğu durumda çalışacak olan web'deki akışı görüntülemek, flash player üzerinden gerçekleştirilir. Ticari olmayan kullanım için ücretsiz olan iki ürünü denedim: JW Player ve Flowplayer . Flowplayer'da kaldım, ancak nedenini, belki de eklentileri (kullanmıyorum :)) veya daha iyi belgeler yüzünden hatırlamıyorum.
Web sayfasındaki VLC'den FLV akışını görüntüleme burada ele alınmıştır: asf ve Flash ile Web Sitesine VLC Akışı
Sorun giderme
Ortaya çıkacak olan sorunların farkında olun. İlk şey, her şeyde olduğu gibi okuyun . VLC çok konuşkan bir program, bu yüzden sorunun nerede olduğunu söyleyecektir. Video / ses cihazına erişim izni, kodlayıcı eksik, yanlış yazılmış - çıkış parametreleri, vb. Sorun olabilir mi ... iftop
Verilerin gerçekten ağ üzerinden mi aktığını görmek için kullanmayı öğrenin .