สตรีมวิดีโอสดจากโทรศัพท์ Android เครื่องหนึ่งไปยังอีกเครื่องหนึ่งผ่าน WiFi


115

ฉันค้นหาอินเทอร์เน็ตมาหลายวันแล้วเกี่ยวกับวิธีใช้คุณสมบัติสตรีมวิดีโอจากโทรศัพท์ Android ไปยังโทรศัพท์ Android เครื่องอื่นผ่านการเชื่อมต่อ WiFi แต่ดูเหมือนจะไม่พบอะไรที่เป็นประโยชน์ ฉันมองหานักพัฒนา Android เพื่อหาโค้ดตัวอย่าง stackoverflow, google, android blogs แต่ไม่มีอะไรเลย ทั้งหมดที่ฉันสามารถหาได้คือโซลูชันโทรศัพท์สู่เดสก์ท็อปหรือเดสก์ท็อปสู่โทรศัพท์สำหรับการสตรีม แต่ไม่มีสิ่งใดที่ฉันสามารถยืมได้ในการนำไปใช้งาน

ฉันจำเป็นต้องควบคุมหุ่นยนต์โดยใช้ arduino ADK ดังนั้นฉันจึงใช้โทรศัพท์ 2 เครื่องโดยเครื่องหนึ่งจะติดตั้งบนหุ่นยนต์และอีกเครื่องจะรับสตรีมวิดีโอจากหุ่นยนต์ ฉันพูดถึงสิ่งนี้เพราะฉันพยายามทำให้เกิดความล่าช้าน้อยที่สุดระหว่างเวลาออกอากาศและเวลารับชม

ฉันกำลังเขียนแอพ 2 แอพหนึ่งแอพหลักในการควบคุมหุ่นยนต์ (จากโทรศัพท์มือถือ) ซึ่งจะควบคุมแอพทาสและรับสตรีมและแอพทาสตัวที่สองซึ่งจะทำงานบนโทรศัพท์ที่รัดหุ่นยนต์ควบคุมมอเตอร์ / แอคชูเอเตอร์ / สตรีมไปยังแอปหลัก ฉันไม่สามารถใช้แอพของบุคคลที่สามได้ ฉันต้องการรวมโค้ดสตรีมวิดีโอเข้ากับ 2 แอพของฉัน

มีทางเลือกอะไรบ้างในการบรรลุเป้าหมายนี้? นอกจากนี้มันยากมากที่จะทำเพราะฉันไม่เคยทำงานกับการสตรีมวิดีโอเลยฉันทำได้ค่อนข้างดีทั้งในการพัฒนา Java และ Android ฉันควรเข้ารหัส / ถอดรหัสสตรีมอย่างไรฉันจะเริ่มการเชื่อมต่อได้อย่างไรฉันจะต้องทำงานกับ UDP แทน TCP / IP หรือไม่ ฉันไม่รู้ว่าจะเริ่มจากตรงไหนไม่มีตัวอย่างโค้ดเลย ฉันค่อนข้างมั่นใจว่าสิ่งนี้สามารถทำได้ ฉันไม่พบสิ่งที่เป็นประโยชน์ที่จะช่วยให้ฉันเริ่มต้นไปในทิศทางที่ถูกต้อง

ฉันเจอสปายดรอยด์ แต่มันใช้ VLC บนเดสก์ท็อปดังนั้นมันจึงไม่ดีสำหรับฉัน


แก้ไข:เช็คเอาท์เลซีย์ Moreau ของบล็อก เขาลงรายละเอียดเกี่ยวกับการดำเนินการนี้


1
คุณช่วยแชร์โปรเจ็กต์ของคุณได้ไหมฉันกำลังทำสิ่งที่คล้ายกัน แต่สตรีมวิดีโอระหว่าง Android และเดสก์ท็อป (WebClient) ... ฉันคิดถึง html5 + websockets แต่ฉันประสบปัญหามากมาย ...
Buksy

1
ฉันกำลังพัฒนาโซลูชันดังกล่าวซึ่งเท่ากับ 80% กับสิ่งที่คุณพยายามทำ คุณต้องกำหนดค่าเซิร์ฟเวอร์ VOIP จากนั้นสร้างไคลเอนต์สำหรับ VOIP ที่จะถ่ายโอนเสียงและวิดีโอของคุณ ฉันยังมองหามัน หากมีใครทราบโปรดแจ้งให้เราทราบ
AZ_

1
อีเมลให้ไว้ในโปรไฟล์ของฉัน
AZ_

1
ตรวจสอบโครงการของฉัน ทุกอย่างใน java และอธิบายอย่างละเอียดcagneymoreau.com/stream-video-android
cagney

1
ขอบคุณฉันยังทำงานเกี่ยวกับหุ่นยนต์ เรื่องสนุก ๆ
cagney

คำตอบ:


55

หากคุณไม่ต้องการฟังก์ชั่นการบันทึกและการเล่นในแอพของคุณการใช้แอพสตรีมมิงและเครื่องเล่นนอกชั้นวางเป็นทางเลือกที่สมเหตุสมผล

อย่างไรก็ตามหากคุณต้องการให้มันอยู่ในแอพของคุณคุณจะต้องดูMediaRecorder API (สำหรับแอพเซิร์ฟเวอร์ / กล้อง) และMediaPlayer (สำหรับแอพไคลเอนต์ / เครื่องเล่น)

โค้ดตัวอย่างด่วนสำหรับเซิร์ฟเวอร์:

// this is your network socket
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mCamera = getCameraInstance();
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// this is the unofficially supported MPEG2TS format, suitable for streaming (Android 3.0+)
mMediaRecorder.setOutputFormat(8);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

ในด้านผู้เล่นมันค่อนข้างยุ่งยากคุณสามารถลองสิ่งนี้:

// this is your network socket, connected to the server
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(pfd.getFileDescriptor());
mMediaPlayer.prepare();
mMediaPlayer.start();

น่าเสียดายที่ mediaplayer มีแนวโน้มที่จะไม่เป็นเช่นนี้ดังนั้นคุณจึงมีสองทางเลือก: (ก) บันทึกข้อมูลจากซ็อกเก็ตไปยังไฟล์และ (หลังจากที่คุณมีข้อมูลเล็กน้อย) เล่นกับสื่อกลางจากไฟล์หรือ (b) สร้าง http ขนาดเล็ก พร็อกซีที่ทำงานในเครื่องและสามารถยอมรับคำขอ GET ของผู้เล่นสื่อกลางตอบกลับด้วยส่วนหัว HTTP จากนั้นคัดลอกข้อมูลจากเซิร์ฟเวอร์ระยะไกลไปยังเซิร์ฟเวอร์นั้น สำหรับ (a) คุณจะสร้าง mediaplayer ด้วยเส้นทางไฟล์หรือ url ของไฟล์สำหรับ (b) ให้ http url ชี้ไปที่พร็อกซีของคุณ

ดูสิ่งนี้ด้วย:

สตรีมวิดีโอสดจากโทรศัพท์ไปยังโทรศัพท์โดยใช้ซ็อกเก็ต fd

MediaPlayer พูดติดอ่างเมื่อเริ่มเล่น mp3


2
สวัสดีอเล็กซ์คุณเคยมีประสบการณ์กับการส่งไฟล์เสียงที่เก็บไว้ในเครื่องจากโทรศัพท์ Android ผ่าน RTP หรือไม่?
B770

สวัสดีคุณช่วยส่งโครงการที่สมบูรณ์ของมันมาให้ฉันได้ไหม
Umar Asghar

1
คุณช่วยโพสต์โครงการที่สมบูรณ์ของคุณได้ไหม
Yazhini Murugaiya

อันไหนคือซ็อกเก็ตเซิร์ฟเวอร์และซ็อกเก็ตไคลเอนต์
Yazhini Murugaiya

1
@AhmedHamdy Indeed: ใน API ระดับ 23 (Android 6.0) คุณสามารถใช้setDataSource(MediaDataSource)แทนFileDescriptorไฟล์. การใช้งานMediaDataSourceจะช่วยให้คุณสามารถอ่านและบัฟเฟอร์เครือข่ายของคุณเองได้โดยไม่ต้องเขียนลงในไฟล์ชั่วคราว
Alex I

9

ฉันเคยทำงานอะไรแบบนี้มาแล้วครั้งหนึ่ง แต่การส่งวิดีโอและเล่นแบบเรียลไทม์เป็นสิ่งที่ซับซ้อนมาก ฉันขอแนะนำให้คุณทำงานกับ PNG เท่านั้น ในการใช้งานของฉันสิ่งที่ฉันทำคือจับภาพ PNG โดยใช้กล้องโฮสต์จากนั้นส่งผ่านเครือข่ายไปยังไคลเอนต์ซึ่งจะแสดงภาพทันทีที่ได้รับและขอภาพถัดไปจากโฮสต์ เนื่องจากคุณใช้ wifi การสื่อสารจะเร็วพอที่จะรับภาพได้ประมาณ 8-10 ภาพต่อวินาที (โดยประมาณเท่านั้นฉันใช้บลูทู ธ ) ดังนั้นนี่จะดูเหมือนวิดีโอต่อเนื่อง แต่ใช้ความพยายามน้อยกว่ามาก สำหรับการสื่อสารคุณอาจใช้ซ็อกเก็ต UDP (เร็วขึ้นและซับซ้อนน้อยกว่า) หรือ DLNA (ไม่แน่ใจว่าทำงานอย่างไร)


ใช่นี่จะเป็นทางเลือกสุดท้ายของฉัน ขอบคุณสำหรับความคิดเห็น!
androidu

3
แน่นอนว่าสตรีม jpeg จะมีประสิทธิภาพมากกว่าสตรีม png?
stealthcopter

ฉันแค่แนะนำให้ใช้รูปภาพคุณสามารถใช้รูปแบบใดก็ได้ที่คุณต้องการ
Arveen

@krossreg> คุณช่วยวางโค้ดตัวอย่างสำหรับสิ่งที่คุณแนะนำได้ไหม
Jasper

8

คุณสามารถใช้IP Webcamหรืออาจใช้ DLNA ตัวอย่างเช่นอุปกรณ์ Samsung มาพร้อมกับแอพที่เรียกว่า AllShare ซึ่งสามารถแชร์และเข้าถึงอุปกรณ์ที่เปิดใช้งาน DLNA บนเครือข่าย ฉันคิดว่า IP Webcam เป็นทางออกที่ดีที่สุดของคุณ คุณควรจะสามารถเปิดสตรีมที่สร้างขึ้นโดยใช้เครื่องเล่นวิดีโอ MX หรืออะไรทำนองนั้น


2
ฉันกำลังเขียนแอพ 2 แอพหนึ่งแอพหลักสำหรับควบคุมหุ่นยนต์ (จากโทรศัพท์มือถือ) และเพื่อดูสิ่งที่หุ่นยนต์เห็นและแอพทาสที่สองซึ่งจะทำงานบนโทรศัพท์ที่รัดหุ่นยนต์ควบคุมมอเตอร์ / แอคชูเอเตอร์ / สตรีมมิ่ง ฉันไม่สามารถใช้แอพของบุคคลที่สามได้ ฉันต้องการรวมโค้ดสตรีมวิดีโอเข้ากับ 2 แอพของฉัน
androidu

บางทีคุณอาจหาข้อมูลเกี่ยวกับข้อมูลจำเพาะของ DLNA และลองสร้างแอปขึ้นมาใช้เองหรืออาจส่งอีเมลถึงผู้พัฒนาเว็บแคมของ IP Webcam และขอความช่วยเหลือ
ldam

1
วิศวกรย้อนกลับหรือไม่? : P
mgibson

ใช่ฉันไม่มีทางเลือกอื่นที่ฉันเดา
androidu

5

คุณสามารถตรวจสอบAndroid VLC ที่สามารถสตรีมและเล่นวิดีโอได้หากคุณต้องการ indagate มากขึ้นคุณสามารถตรวจสอบGITของพวกเขาเพื่อวิเคราะห์สิ่งที่พวกเขาทำ โชคดี!


3
ฉันกำลังมองหา Android VLC คุณช่วยบอกวิธีใช้เพื่อสตรีมวิดีโอได้ไหม
user1914692
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.