IT

WiFi를 통해 한 Android 스마트 폰에서 다른 스마트 폰으로 라이브 스트림 비디오

lottoking 2020. 7. 28. 07:41
반응형

WiFi를 통해 한 Android 스마트 폰에서 다른 스마트 폰으로 라이브 스트림 비디오


WiFi 연결을 통해 안드로이드 폰에서 다른 안드로이드 폰으로 비디오 스트리밍 기능을 구현하는 방법에 대해 인터넷을 며칠 동안 검색했지만 사용할 수없는 것입니다. 나는 샘플 코드, stackoverflow, 구글, 안드로이드 블로그를 위해 안드로이드 개발자를 브라우즈 아무것도 없었다. 내가 지원하는 것은 가능하고 스트리밍을위한 것이 아니라 전화 대 서비스 또는 데스크톱 대 전화 솔루션이지만 구현되지 않습니다.

arduino ADK를 사용하는 로봇을 제어해야하는 하나는 로봇에 탑재되고 하나는 로봇에서 비디오 스트림을 수신하는 2 개의 전화를 사용하고 있습니다. 나는 방송 시간과 시청 시간 사이에 가장 작은 지연을 달성하기 때문에 많은 사람들이 있습니다.

슬레이브 앱을 제어하고 스트림을 수신하는 로봇 (휴대 전화에서)을 제어하는 ​​마스터 앱 1 개와 로봇이 설치된 전화에서 실행되는 모터 / 액추에이터를 제어하는 ​​두 번째 슬레이브 앱 2 개를 작성 중입니다 . 마스터 앱으로 / 스트리밍. 불행히도 보관 앱을 사용할 수 있습니다. 비디오 스트림 코드를 2 개의 앱에 통합해야합니다.

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

나는 spydroid를 우연히 발견 했지만 데스크톱에서 VLC를 사용하고 있기 때문에 나에게 좋지 않습니다.


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


앱에서 녹음 및 재생 기능이 필요하지 않은 경우 상용 스트리밍 앱 및 플레이어를 사용하는 것이 합리적입니다.

그러나 앱에는 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가 끈질 기게


나는 이런 일을 한 번 해봤지만 비디오를 실시간으로 재생하는 것은 정말 복잡한 일입니다. PNG 만 사용하는 것이 좋습니다. 내 구현에서 내가 한 것은 호스트 카메라를 사용하여 PNG를 구축 한 다음 네트워크를 통해 클라이언트로 전송하여 이미지를받은 즉시 표시하고 호스트에서 다음 이미지를 요청하는 것입니다. 당신이 와이파 이에 있기 때문에 통신은 초당 약 8-10 이미지를 얻을 수 있습니다. 빠를 것입니다 (근사치 만, 나는 블루투스에서 일했습니다). 즉, 연속적인 비디오처럼 보이지만 약간의 노력으로 실행됩니다. 통신을 위해 UDP 소켓 (빠르고 덜 복잡한) 또는 DLNA (작동 방식이 확실하지)를 사용할 수 있습니다.


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


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

참고 URL : https://stackoverflow.com/questions/14401340/live-stream-video-from-one-android-phone-to-another-over-wifi

반응형