ปัจจุบันฉันพัฒนาสตรีมมิ่งออนไลน์จากกล้อง miniDV 3 ตัวที่เชื่อมต่อผ่าน FireWire ซึ่งคล้ายกับความต้องการของคุณ
คำใบ้ด่วน: vlc + flowplayer / jw player
ก่อนอื่นมีสองรูปแบบวิดีโอที่คุณสามารถใช้ในการสตรีมออนไลน์ได้: FLV และ h264 FLV นั้นง่ายต่อการแปลงรหัส h264 มีอัตราส่วนต่อขนาด / คุณภาพที่ดีกว่า แต่การแปลงรหัสนั้นใช้ซีพียูมากขึ้น ทั้งสองสามารถแสดงโดยผู้เล่นแฟลชในหน้าเว็บ
ประการที่สองของโครงสร้างพื้นฐานสตรีมมิ่ง เนื่องจากแบนด์วิดท์จากแล็ปท็อปของคุณมี จำกัด (หนึ่งถึงสอง Mbps ท็อป) คุณต้องสตรีมไปยังเซิร์ฟเวอร์ของคุณและส่งสัญญาณให้กับลูกค้า ดังนั้นกระแสจะไหล 1 ครั้งไปยังเซิร์ฟเวอร์และจากนั้นครั้ง N ไปยังลูกค้าจากที่นั่น คุณยังไม่ได้อธิบายการเชื่อมต่ออินเทอร์เน็ตสำหรับแล็ปท็อปของคุณดังนั้นสถานการณ์จะแบ่งออกเป็นสองส่วน:
แล็ปท็อปเชื่อมต่อกับที่อยู่ IP สาธารณะหรือคุณสามารถ NAT พอร์ตแล็ปท็อป สถานการณ์นี้ง่ายขึ้นมากเนื่องจากคุณสามารถเชื่อมต่อจากเซิร์ฟเวอร์ไปยังแล็ปท็อปได้ดีและสะดวก ข้อเสียใหญ่คือคุณถูกผูกไว้กับที่เดียว (ที่อยู่ IP หนึ่งแห่ง)
แล็ปท็อปไม่ได้เชื่อมต่อกับที่อยู่ผมสาธารณะ นี่เป็นเรื่องยุ่งยากเล็กน้อย แต่จะทำงานจากเครือข่ายใด ๆ ที่จะช่วยให้คุณสามารถ SSH ไปยังเซิร์ฟเวอร์ของคุณและอัปโหลดได้อย่างเพียงพอ (1 Mbps ควรทำ)
โดยไม่คำนึงถึงสถานการณ์ที่ใช้ infrastructer จะมีลักษณะเช่นนี้
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
สตรีมจากแล็ปท็อป
การจับภาพวิดีโอจากเว็บแคม ฉันไม่เคยจับกระแสจากเว็บแคมที่แนบมาในประเทศ แต่มีตัวอย่างหลายวิธีที่จะทำผ่านทาง V4L เช่น:
ติดตั้งเว็บแคม ส่วนเดียวที่คุณควรสนใจคือ:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
ซึ่งเป็นส่วนแรกของคำสั่ง VLC เพื่อเชื่อมต่อกับเว็บแคม สำหรับรายละเอียดเพิ่มเติมตาม HOWTO ที่กล่าวถึง โดยเฉพาะอย่างยิ่งดูที่ส่วน "กลุ่มวิดีโอ" และเส้นทางอุปกรณ์ที่ถูกต้องไปยัง / dev / วิดีโอและ / dev / audio สิ่งเหล่านี้อาจแตกต่างจากแล็ปท็อปของคุณ
วิดีโอแปลงเพื่อ FLV ส่วนตัวผมใช้ FLV เนื่องจากมันใช้ซีพียูน้อย สตริงรหัสที่ฉันใช้คือ:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
ซึ่งจะแปลงวิดีโอสตรีมเป็นรูปแบบ FLV พร้อม MPGA audio (MP3 ไม่พร้อมใช้งานใน Ubuntu ของฉัน) การสุ่มตัวอย่างเป็นข้อบังคับอย่างใดมันจะไม่ทำงานหากไม่มี แต่คุณสามารถเลือกขนาดที่เล็กกว่าเช่น 22050 ซึ่งจะแปลงรหัสสตรีมวิดีโอ 'ตามที่เป็น' ดังนั้นขนาดจึงเป็น 1: 1 คุณสามารถผนวกพารามิเตอร์ width และ height หรือพารามิเตอร์ scale ดูในเอกสารประกอบ VLC
สตรีมได้จากแล็ปท็อป ตอนนี้คุณต้องสตรีมโลคัลซึ่งเซิร์ฟเวอร์จะเชื่อมต่อ:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
สิ่งนี้จะผูก VLC สตรีมกับ 0.0.0.0:8081/stream.flv คำสั่งทั้งหมดจะมีลักษณะเช่นนี้:
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}'
กำลังรีเฟรชบนเซิร์ฟเวอร์
จับกระแสบนเซิร์ฟเวอร์และ ReStream มัน อีกครั้งเราใช้ VLC เพื่อจับภาพและสตรีม การใช้งานขึ้นอยู่กับสถานการณ์ของโครงสร้างพื้นฐานตั้งแต่ก่อนโพสต์นี้ ดังที่ฉันได้แสดงให้เห็น VLC บนแล็ปท็อปวิดีโอสตรีมในบางพอร์ต พอร์ตนี้ต้องสามารถเข้าถึงได้จากเซิร์ฟเวอร์ หากคุณมีที่อยู่ IP สาธารณะของแล็ปท็อปหรือพอร์ต NATed คุณสามารถทดสอบด้วย telnet:
server$ telnet public_ip_address 8081
อะไรก็ตามยกเว้น "การหมดเวลาเชื่อมต่อ" จะเปิดเผยว่าคุณสามารถเชื่อมต่อกับสตรีมแล็ปท็อปของคุณได้ หากคุณไม่มีที่อยู่ IP สาธารณะหรือคุณไม่สามารถพอร์ต NAT คุณต้องทำอย่างอื่น คุณสามารถ SSH จากแล็ปท็อปไปยังเซิร์ฟเวอร์และส่งต่อพอร์ตแล็ปท็อปไปยังเซิร์ฟเวอร์ระยะไกล คำสั่ง SSH ที่ถูกต้องจะเป็น:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
คำสั่งเวทย์มนตร์นี้จะ 'ผูก' พอร์ตแล็ปท็อปของคุณ 8081 ไปยังเซิร์ฟเวอร์พอร์ต 8081 ซึ่งหมายความว่าเมื่อคุณเชื่อมต่อบนเซิร์ฟเวอร์กับ 8081 คุณจะเชื่อมต่อกับพอร์ตแล็ปท็อป 8081 ผ่านอุโมงค์ SSH ในใจ เยี่ยมเลยเหรอ? :) ดังนั้นสิ่งที่เราต้องทำก็คือการเชื่อมต่อและสตรีม VLC แบบง่าย:
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}'
หรือในกรณีที่มีที่อยู่ IP สาธารณะหรือพอร์ต 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}'
เช่นเดียวกับในส่วนแล็ปท็อป VLC ของคุณบนเซิร์ฟเวอร์ถูกผูกเข้ากับพอร์ต 8082 ทำไมต้องเป็น 8082 และไม่ใช่ 8081 8081 ได้ถูกนำไปใช้โดย SSH รีโมตไปข้างหน้า ทำไมเราไม่ใช้ส่วน transcode ดังตัวอย่างแรก? วิดีโอมีรูปแบบที่ถูกต้องอยู่แล้วดังนั้นสิ่งที่เราต้องทำคือเพียงสตรีมตามที่เป็น
การทดสอบ ในทั้งสองตัวอย่างคุณสามารถทดสอบการใช้งานได้ด้วยการดูสตรีมผ่าน VLC คุณสามารถทดสอบกระแสท้องถิ่นของคุณ:
laptop$ vlc http://localhost:8081/stream.flv
และคุณสามารถทดสอบการสตรีมเซิร์ฟเวอร์ของคุณ:
laptop$ vlc http://server_ip_address:8082/stream.flv
ในทั้งสองกรณีคุณควรเห็นอินพุตเว็บแคมของคุณ
แสดงกระแสบนเว็บ
การแสดงสตรีมบนเว็บซึ่งส่วนใหญ่จะทำงานผ่านโปรแกรมเล่นแฟลช ฉันพยายามสองผลิตภัณฑ์ซึ่งเป็นฟรีสำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์: เจดับบลิวเครื่องเล่นและFlowplayer ฉันอยู่กับ Flowplayer แต่ฉันจำไม่ได้ว่าเหตุผลอาจเป็นเพราะปลั๊กอิน (ซึ่งฉันไม่ได้ใช้ :)) หรือเพราะเอกสารที่ดีกว่า
วิธีแสดงสตรีม FLV จาก VLC ในหน้าเว็บครอบคลุมที่นี่: สตรีม VLC ไปยังเว็บไซต์ที่มี asf และ Flash
การแก้ไขปัญหา
ระวังปัญหาต่าง ๆ ที่จะเกิดขึ้น สิ่งแรกในขณะที่ทุกอย่างอ่าน VLC เป็นโปรแกรมที่ช่างพูดมากดังนั้นมันจะบอกคุณว่าปัญหาอยู่ที่ไหน อาจเป็นปัญหาเกี่ยวกับการอนุญาตให้เข้าถึงอุปกรณ์วิดีโอ / เสียงตัวแปลงสัญญาณที่ขาดหายไปสะกดผิด - พารามิเตอร์หมด, ... เรียนรู้การใช้iftop
เพื่อดูว่าข้อมูลไหลผ่านเครือข่ายจริงหรือไม่เป็นต้น