시작하기 - Amazon Interactive Video Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

시작하기

라이브러리 설치

Amazon 개발 환경에 Amazon IVS Android 브로드캐스트 라이브러리를 추가하려면 여기에 나온 것처럼(최신 버전의 Amazon IVS 브로드캐스트 SDK용) 라이브러리를 모듈의 build.gradle 파일에 추가합니다.

repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:ivs-broadcast:1.14.1' }

또는 SDK를 수동으로 설치하려면 다음 위치에서 최신 버전을 다운로드하세요.

이벤트 리스너 생성

이벤트 리스너를 설정하면 상태 업데이트, 디바이스 변경 알림, 오류 및 세션 오디오 정보를 수신할 수 있습니다.

BroadcastSession.Listener broadcastListener = new BroadcastSession.Listener() { @Override public void onStateChanged(@NonNull BroadcastSession.State state) { Log.d(TAG, "State=" + state); } @Override public void onError(@NonNull BroadcastException exception) { Log.e(TAG, "Exception: " + exception); } };

권한 요청

앱에서 사용자의 카메라 및 마이크에 액세스할 수 있는 권한을 요청해야 합니다. (이는 Amazon IVS에만 국한되지 않으며 카메라와 마이크에 액세스해야 하는 모든 애플리케이션에 필요합니다.)

여기에서는 사용자가 부여된 권한이 이미 있는지 확인하고, 그렇지 않으면 권한을 요청합니다.

final String[] requiredPermissions = { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO }; for (String permission : requiredPermissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { // If any permissions are missing we want to just request them all. ActivityCompat.requestPermissions(this, requiredPermissions, 0x100); break; } }

여기서는 다음과 같은 사용자 응답을 받습니다.

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 0x100) { for (int result : grantResults) { if (result == PackageManager.PERMISSION_DENIED) { return; } } setupBroadcastSession(); } }

브로드캐스트 세션 생성

브로드 캐스트 인터페이스는 com.amazonaws.ivs.broadcast.BroadcastSession입니다. 이 인터페이스를 아래와 같이 사전 설정으로 초기화합니다. 초기화 중 오류(예: 코덱 구성 실패)가 발생하는 경우 BroadcastListener에서 오류 메시지가 표시되고 broadcastSession.isReadyfalse가 됩니다.

중요: Amazon IVS 브로드캐스트 SDK for Android에 대한 모든 호출은 SDK가 인스턴스화된 스레드에서 수행해야 합니다. 다른 스레드에서 호출하면 SDK가 치명적인 오류를 발생시키고 브로드캐스트가 중지됩니다.

// Create a broadcast-session instance and sign up to receive broadcast // events and errors. Context ctx = getApplicationContext(); broadcastSession = new BroadcastSession(ctx, broadcastListener, Presets.Configuration.STANDARD_PORTRAIT, Presets.Devices.FRONT_CAMERA(ctx));

브로드캐스트 세션 생성(고급 버전) 단원도 참조하세요.

ImagePreviewView미리보기로 설정

활성 카메라 디바이스의 미리 보기를 표시하려면 보기 계층 구조에 디바이스의 미리 보기 ImagePreviewView를 추가합니다.

// awaitDeviceChanges will fire on the main thread after all pending devices // attachments have been completed broadcastSession.awaitDeviceChanges(() -> { for(Device device: session.listAttachedDevices()) { // Find the camera we attached earlier if(device.getDescriptor().type == Device.Descriptor.DeviceType.CAMERA) { LinearLayout previewHolder = findViewById(R.id.previewHolder); ImagePreviewView preview = ((ImageDevice)device).getPreviewView(); preview.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); previewHolder.addView(preview); } } });

브로드캐스트 시작

GetChannel 엔드포인트의 ingestEndpoint 응답 필드에서 수신하는 호스트 이름은 앞에 rtmps://가 붙고 뒤에 /app가 붙습니다. 전체 URL은 rtmps://{{ ingestEndpoint }}/app 형식이어야 합니다.

broadcastSession.start(IVS_RTMPS_URL, IVS_STREAMKEY);

Android 브로드캐스트 SDK는 RTMPS 수집만 지원하며 안전하지 않은 RTMP 수집은 지원하지 않습니다.

브로드캐스트 시작

broadcastSession.stop();

브로드캐스트 세션 해제

브로드캐스트 세션이 더 이상 사용되지 않는 경우 broadcastSession.release() 메서드를 호출하여 라이브러리에서 사용하는 리소스를 해제해야 합니다.

@Override protected void onDestroy() { super.onDestroy(); previewHolder.removeAllViews(); broadcastSession.release(); }