Android

안드로이드 WebRTC 시작하기

park_juyoung 2018. 12. 24. 22:11


이 글을 작성하게 된 주된 이유는 적절한 가이드가 없기 때문에 작성하게 되었다.


선행조건


1. 컴파일 된 WebRTC 원시 코드가 필요. 
   여기에서 참고.
2. 안드로이드 스튜디오.


Update: arr 파일을 여기에서 다운 받을수 있습니다.


첫번째, WebRTC의존성을 build.gradle파일에 추가




이제 카메라에서 비디오를 가져와서 화면에 표시하는 방법을 알아보겠습니다. (WebRTC apis 사용).




비디오 스트림을 카메라로부터 가져와 뷰에 표시하는 단계는 아래와 같습니다.


  1. PeerConnectionFactory를 생성하고 초기화
  2. 장치의 카메라를 사용하는 VideoCapturer 인스턴스 생성
  3. Captuer로 부터 VideoSource를 생성
  4. source로 부터 ViedoTrack 생성
  5. SurfaceViewRenderer View와 VIedoTrack 인스턴스를 사용하여 Viedo renderer를 생성

PeerConnectionFactory 생성과 초기화


//PeerConnectionFactory globals 초기화
PeerConnectionFactory.initializeAndroidGlobals(this,true);

//PeerConnectionFactory 인스턴스 생성.
PeerConnectionFactory.Options options=new PeerConnectionFactory.Options();
PeerConnectionFactory peerConnectionFactory=new PeerConnectionFactory(options);


WebRTC 라이브러리에 오디오,비디오 및 비디오 하드웨어 가속을 사용하도록 초기화하도록 합니다.

또한 새로운 PeerConnectionFactroy를 생성 할 떄 추가 Options 인스턴스를 전달할 수 있습니다. 이 옵션은 disableEncryption, disableNetworkMonitor 및 networkIgnoreMask와 같은 특정 플래그를 설정할 수 있게합니다.

VideoCapturer 생성


이제 PeerConnectionFactory가 생겼으므로 카메라 카메라에서 이미지 / 비디오를 가져 오는 Capturer를 만들 수 있습니다. 아래의 방법은 앱에서 사용할 수있는 첫 번째 카메라를 찾습니다. (대부분의 경우 장치의 후면 카메라를 반환합니다)


private VideoCapturer createCameraCapturer(CameraEnumerator enumerator) {
final String[] deviceNames = enumerator.getDeviceNames();

// 후면 카메라를 찾는다.
for (String deviceName : deviceNames) {
if (enumerator.isBackFacing(deviceName)) {
VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null);

if (videoCapturer != null) {
return videoCapturer;
}
}
}

// 후면 카메라를 찾을 수 없다면 다른 카메라를 찾는다.
for (String deviceName : deviceNames) {
if (!enumerator.isBackFacing(deviceName)) {
VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null);
if (videoCapturer != null) {
return videoCapturer;
}
}
}

return null;
}


Capturer로부터 VideoSource and VideoTrack 생성


VideoCapturer가 생겼으므로 capturer를 사용하여 ViedoSource를 만들 수 있습니다.
//VideoSource 인스턴스 생성
VideoSource videoSource = peerConnectionFactory.createVideoSource(videoCapturerAndroid);
VideoTrack localVideoTrack = peerConnectionFactory.createVideoTrack("100", videoSource);


PeerConnectionFactory 인스턴스로부터 VideoSource가 생성되면 ViedoTource를 사용하여 VideoTrack를 생성합니다. VideoTrack에는 고유한 식별자가 있습니다. 여기에서는 100으로 하였습니다.


SurfaceViewRenderer 


ViedoTrack로부터 카메라의 데이터 스트림을 제공받아서 SurfaceViewRenderer로 보여줄수 있습니다.
그리고 renderer를 사용하기전에 VideoCapturer를 시작해야합니다.

//카메라로부터 비디오 캡쳐를 시작한다.
//파라메터는 width,height and fps
videoCapturerAndroid.startCapture(1000, 1000, 30);

이후에 SurfaceViewRenderer를 xml로 생성하거나 코드상에서 생성하여 track에 추가한다.


//SurfaceViewRenderer를 생성하고 초기화 한다.그리고  renderer를 track에 추가한다.
SurfaceViewRenderer videoView = (SurfaceViewRenderer) findViewById(R.id.surface_rendeer);
videoView.setMirror(true);

EglBase rootEglBase = EglBase.create();
videoView.init(rootEglBase.getEglBaseContext(), null);

localVideoTrack.addRenderer(new VideoRenderer(videoView));


이러한 과정이 끝나게 되면 화면상에 화면이 출력되게 된다.

'Android' 카테고리의 다른 글

안드로이드 WebRTC 시작하기 -3  (0) 2018.12.25
안드로이드 WebRtc 시작하기 -2  (0) 2018.12.25
AsyncTask를 사용해보자  (0) 2018.11.20
HttpURLConnection으로 웹서버 통신하기  (0) 2018.11.11
HTTP 통신 VS Socket 통신  (2) 2018.11.11