Wi-Fi를 통해 한 Android 휴대 전화에서 다른 휴대 전화로 실시간 스트리밍 동영상


115

나는 WiFi 연결을 통해 안드로이드 폰에서 다른 안드로이드 폰으로 비디오 스트리밍 기능을 구현하는 방법에 대해 며칠 동안 인터넷을 검색했지만 유용한 것을 찾을 수없는 것 같습니다. 샘플 코드, stackoverflow, google, android 블로그에 대해 Android 개발자를 찾았지만 아무것도 없었습니다. 내가 찾을 수있는 것은 스트리밍을위한 일종의 전화 대 데스크톱 또는 데스크톱 대 전화 솔루션이지만 구현에서 빌릴 수있는 것은 없습니다.

arduino ADK를 사용하여 로봇을 제어해야하므로 두 대의 전화기를 사용하고 있는데 하나는 로봇에 장착되고 다른 하나는 로봇으로부터 비디오 스트림을 수신합니다. 방송 시간과 시청 시간 사이의 지연 시간을 최소화하기 위해 노력하고 있기 때문입니다.

슬레이브 앱을 제어하고 스트림을 수신하는 로봇을 제어하는 ​​마스터 앱 (휴대폰에서)과 모터 / 액추에이터를 제어하는 ​​로봇이 묶인 전화기에서 실행되는 두 번째 슬레이브 앱, 두 개의 앱을 작성 중입니다. / 스트리밍 마스터 앱. 안타깝게도 타사 앱을 사용할 수 없습니다. 비디오 스트림 코드를 2 개의 앱에 통합해야합니다.

이를 달성하기 위해 어떤 옵션이 있습니까? 또한 비디오 스트리밍 작업을 한 적이 없기 때문에 수행하기가 매우 어렵고, Java와 Android 개발 모두에서 꽤 잘하고 있습니다. 스트림을 어떻게 인코딩 / 디코딩하고 연결을 시작합니까? TCP / IP 대신 UDP로 작업해야합니까? 어디서부터 시작해야할지 모르겠습니다. 샘플 코드는 어디에도 없습니다. 나는 이것이 달성 될 수 있다고 확신합니다. 올바른 방향으로 시작하는 데 유용한 정보를 찾을 수 없습니다.

나는 spydroid를 우연히 발견 했지만 데스크탑에서 VLC를 사용하고 있으므로 나에게 좋지 않습니다.


편집 : Cagney Moreau의 블로그를 확인하십시오 . 그는 이것을 구현하는 방법에 대해 자세히 설명합니다.


1
당신의 프로젝트를 공유 할 수 있습니까, 저도 비슷한 일을하고 있지만 안드로이드와 데스크탑 (WebClient)간에 비디오 스트리밍 ... html5 + 웹 소켓에 대해 생각했지만 많은 문제에 직면했습니다 ...
Buksy

1
나는 당신이하려는 것과 80 % 같은 솔루션을 개발하고 있습니다. VOIP 서버를 구성한 다음 음성 및 비디오를 전송할 해당 VOIP에 대한 클라이언트를 만들어야합니다. 나도 찾고 있어요. 아는 사람이 있으면 알려주세요.
AZ_

1
내 프로필에 이메일이 주어졌습니다
AZ_

1
내 프로젝트를 확인하십시오. 자바에서 모든 및 상세 설명은 cagneymoreau.com/stream-video-android
카 그니

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();

불행히도 미디어 플레이어는 이것을 좋아하지 않는 경향이 있으므로 (a) 소켓에서 파일로 데이터를 저장하고 (데이터를 조금 확보 한 후) 파일에서 미디어 플레이어로 재생하거나 (b) 작은 http를 만드는 두 가지 옵션이 있습니다. 로컬에서 실행되고 미디어 플레이어의 GET 요청을 수락하고 HTTP 헤더로 응답 한 다음 원격 서버에서 데이터를 복사 할 수있는 프록시. (a)의 경우 파일 경로 또는 파일 URL로 미디어 플레이어를 만들고 (b) 프록시를 가리키는 http URL을 제공합니다.

또한보십시오:

소켓 fd를 사용하여 전화에서 전화로 라이브 비디오 스트리밍

MP3 재생 시작시 MediaPlayer가 끊김


2
안녕 Alex, 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를 캡처 한 다음 네트워크를 통해 클라이언트로 전송하는 것입니다. 그러면 수신되는 즉시 이미지가 표시되고 호스트에서 다음 이미지를 요청합니다. Wi-Fi에 연결되어 있기 때문에 통신 속도가 초당 8-10 개의 이미지를 얻을 수있을만큼 빠릅니다 (근사치 만 블루투스로 작업했습니다). 따라서 이것은 지속적인 비디오처럼 보이지만 훨씬 적은 노력으로 보입니다. 통신을 위해 UDP 소켓 (빠르고 덜 복잡함) 또는 DLNA (작동 방식을 알 수 없음)를 사용할 수 있습니다.


그래, 이것이 나의 마지막 수단이 될거야. 피드백 감사드립니다!
androidu

3
확실히 jpeg 스트림이 png 스트림보다 더 효율적일까요?
stealthcopter

이미지 사용을 제안한 것뿐입니다. 원하는 형식을 사용할 수 있습니다.
Arveen

@krossreg> 당신이 제안한 샘플 코드를 붙여 주시겠습니까?
Jasper

8

IP 웹캠을 사용 하거나 DLNA를 사용할 수 있습니다 . 예를 들어 삼성 장치에는 네트워크에서 DLNA 지원 장치를 공유하고 액세스 할 수있는 AllShare라는 앱이 함께 제공됩니다. 그래도 IP 웹캠이 최선의 방법이라고 생각합니다. MX 비디오 플레이어 등을 사용하여 생성 한 스트림을 열 수 있어야합니다.


2
저는 2 개의 앱을 작성하고 있습니다. 하나는 로봇을 제어하고 (휴대폰에서) 로봇이 보는 것을 볼 수있는 마스터 앱이고, 두 번째는 로봇이 묶인 전화기에서 실행되어 모터 / 액추에이터 / 스트리밍을 제어하는 ​​슬레이브 앱입니다. 안타깝게도 타사 앱을 사용할 수 없습니다. 비디오 스트림 코드를 2 개의 앱에 통합해야합니다.
androidu

아마도 DLNA 사양에 대한 조사를 수행하고 자신을 위해 사용하는 앱을 만들거나 IP 웹캠 개발자에게 이메일을 보내 도움을 요청할 수 있습니다.
ldam

1
리버스 엔지니어링? : P
mgibson

네, 다른 선택의 여지가 없습니다.
androidu 2013-08-13

5

동영상을 스트리밍하고 재생할 수 있는 Android VLC를 확인할 수 있으며 , 더 많은 정보를 표시하려면 GIT 를 확인하여 작업 을 분석 할 수 있습니다 . 행운을 빕니다!


3
Android VLC를 살펴보고 있습니다. 비디오 스트리밍에 사용하는 방법을 알려주시겠습니까?
user1914692
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.