IVS Broadcast SDK: 사용자 지정 이미지 소스 | 저지연 스트리밍 - Amazon IVS

IVS Broadcast SDK: 사용자 지정 이미지 소스 | 저지연 스트리밍

본 가이드에서는 사용자가 이미 브로드캐스트 세션을 설정하는 방법(Android, iOS) 및 믹서 API 사용 방법에 대해 잘 알고 있다고 가정합니다.

사용자 정의 이미지 입력 소스를 사용하면 애플리케이션이 사전 설정된 카메라 또는 화면 공유로 제한되지 않고 브로드캐스트 SDK에 자체 이미지 입력을 제공할 수 있습니다. 반투명 워터마크 또는 정적인 '잠시 자리 비움' 화면처럼 간단한 사용자 지정 이미지 소스일 수도 있고, 앱에서 카메라에 뷰티 필터를 추가하는 것과 같은 추가 사용자 지정 처리를 수행할 수도 있습니다.

뷰티 필터가 있는 카메라에 워터마크를 더하는 등 다수의 사용자 정의 이미지 소스를 사용할 수도 있습니다. 카메라의 사용자 지정 제어를 위해 사용자 정의 이미지 입력 소스를 사용하는 경우(카메라 액세스가 필요한 뷰티 필터 라이브러리 사용 등) 브로드캐스트 SDK가 카메라 관리를 담당하지 않습니다. 대신 애플리케이션은 카메라의 수명 주기를 올바르게 처리합니다. 애플리케이션이 카메라를 관리하는 방법에 대한 공식 플랫폼 설명서를 참조하세요.

Android

브로드캐스트 세션을 생성한 후 이미지 입력 소스를 생성합니다.

SurfaceSource surfaceSource = broadcastSession.createImageInputSource();

이 메서드는 표준 Android Surface에서 지원하는 이미지 소스인 SurfaceSource을(를) 반환합니다. 이는 브로드캐스트 세션에 자동 연결되므로 이후에 attachDevice(...) 메서드를 사용할 필요가 없습니다. 그러나 SurfaceSource은(는) 슬롯에 바인딩되어야 합니다. 이 내용은 나중에 아래에서 다룹니다. SurfaceSource은(는) 크기를 조정하고 회전할 수 있습니다. 또한 ImagePreviewView을(를) 생성하여 콘텐츠의 미리 보기를 표시할 수 있습니다.

기본 Surface 검색 방법:

Surface surface = surfaceSource.getInputSurface();

Surface은(는) Camera2, OpenGL ES 및 기타 라이브러리와 같은 이미지 제작자의 출력 버퍼로 사용할 수 있습니다. 가장 간단한 사용 사례는 정적 비트맵 또는 색상을 Surface의 캔버스에 직접 그리는 것입니다. 그러나 많은 라이브러리(뷰티 필터 라이브러리 등)는 애플리케이션이 렌더링을 위해 외부 Surface을(를) 지정할 수 있도록 하는 메서드를 제공합니다. 이러한 메서드를 사용하여 Surface을(를) 필터 라이브러리에 전달하여, 라이브러리가 브로드캐스트 세션에서 스트리밍할 수 있도록 처리된 프레임을 출력할 수 있습니다.

마지막으로, SurfaceSource은(는) 브로드캐스트 세션에서 스트리밍하려면 Mixer.Slot에 바인딩되어야 합니다.

broadcastSession.getMixer().bind(surfaceSource, "customSlot");

Android 샘플 코드에는 사용자 정의 이미지 소스를 다양한 방식으로 사용하는 몇 가지 예제가 있습니다.

  • 반투명 워터마크가 MixerActivity에 추가되었습니다.

  • MP4 파일이 MixerActivity에 루프되었습니다.

  • CameraManager 유틸리티 클래스는 CustomActivity에서 Camera2 메서드를 사용하여 디바이스 카메라의 사용자 지정 관리를 수행하며, 간단한 세피아 필터를 적용합니다. 이 예제는 카메라를 관리하고 브로드캐스트 세션의 사용자 지정 SurfaceSource을(를) 카메라 캡처 요청으로 전달하는 방법을 보여주기 때문에 특히 유용합니다. 다른 외부 라이브러리를 사용하는 경우 방송 세션에서 제공하는 Android Surface로 출력하도록 라이브러리를 구성하는 방법에 대한 문서를 따르세요.

iOS

브로드캐스트 세션을 생성한 후 이미지 입력 소스를 만듭니다.

let customSource = broadcastSession.createImageSource(withName: "customSourceName")

이 메서드는 애플리케이션이 CMSampleBuffers을(를) 수동으로 제출하도록 허용하는 이미지 소스인 IVSCustomImageSource을(를) 반환합니다. 지원되는 픽셀 형식은 iOS 브로드캐스트 SDK 참조를 참조하세요. 현재 버전에 대한 최신 링크는 최신 브로드캐스트 SDK 릴리스 Amazon IVS 릴리스 정보에 있습니다. 소스는 브로드캐스트 세션에 자동으로 연결되지 않으므로 소스가 스트리밍되기 전에 이미지 소스를 세션에 연결하고 슬롯에 바인딩해야 합니다.

broadcastSession.attach(customSource, toSlotWithName: "customSourceSlot", onComplete: nil)

사용자 지정 소스가 첨부되고 바인딩된 후, 애플리케이션이 CMSampleBuffers를 직접 사용자 지정 소스로 제출할 수 있습니다. 이를 시작하기 위해 onComplete 콜백을 사용하도록 선택할 수 있습니다.

사용자 지정 소스에 제출된 샘플은 브로드캐스트 세션에서 스트리밍됩니다.

customSource.onSampleBuffer(sampleBuffer)

스트리밍 비디오의 경우 콜백에서 이 메서드를 사용하세요. 예를 들어 카메라를 사용하는 경우 AVCaptureSession에서 새 샘플 버퍼를 받을 때마다 애플리케이션이 해당 샘플 버퍼를 사용자 정의 이미지 소스로 전달할 수 있습니다. 원하는 경우 애플리케이션은 샘플을 사용자 정의 이미지 소스에 제출하기 전에 추가 처리(뷰티 필터 등) 를 적용할 수 있습니다.

정적 이미지의 경우 첫 번째 샘플 이후에 사용자 정의 이미지 소스의 슬롯 바인딩이 변경되거나 소스가 분리되어 브로드캐스트 세션에 다시 연결되면 애플리케이션은 샘플을 다시 제출해야 합니다. 예를 들어 슬롯을 제거한 다음 믹서에 슬롯을 추가하는 경우 샘플을 다시 제출해야 합니다.

iOS 샘플 앱에는 사용자 정의 이미지 소스를 다양한 방식으로 사용하는 몇 가지 예제가 있습니다.

  • 반투명 워터마크가 MixerViewController에 추가되었습니다.

  • MP4 파일이 MixerViewController에 루프되었습니다.

  • 디바이스 카메라를 통한 CIFilter 구현이 CustomSourcesViewController에 추가되었습니다. 이를 통해 애플리케이션은 Amazon IVS Broadcast SDK와 독립적으로 디바이스 카메라를 관리할 수 있습니다. AVCaptureSession을 사용하여 디바이스 카메라에서 이미지를 캡처하고, CIFilter 구현을 사용하여 해당 이미지를 처리하고, 라이브 스트리밍을 위해 CMSampleBufferscustomSource에 제출합니다.