본문으로 건너뛰기

JPEG 이미지 실시간 스트리밍

기기의 JPEG 실시간 스트리밍 모드를 시작하고 SDK가 전달하는 각각의 완전한 JPEG 이미지를 표시합니다.

사전 요구 사항

  • 기기가 연결되어 사용할 수 있으며 LiveStreamingAPI를 준수합니다.
  • supportsJPEGImageLiveStreamingtrue입니다.
  • 데이터 콜백을 차단하지 않고 이미지를 디코딩하고 교체할 수 있도록 UI를 구현합니다.

API 참고

프레임워크

AIBuds.xcframework

가져오기

Swift
import AIBuds
import UIKit

속성

Swift
/// Whether JPEG image live streaming is supported
var supportsJPEGImageLiveStreaming: Bool { get }

인스턴스 메서드

Swift
/// Start JPEG image live streaming
/// - Parameters:
///   - sessionStartCompletionHandler: Session start completion handler
///   - jpegDataReceivedHandler: JPEG data received handler
///   - sessionFinishHandler: Session finish handler
func startJPEGImageLiveStreaming(
    withSessionStartCompletionHandler sessionStartCompletionHandler:
        AIBudsLiveStreamingSessionStartCompletionHandler?,
    jpegDataReceivedHandler: AIBudsLiveStreamingJpegDataReceivedHandler?,
    sessionFinishHandler: AIBudsLiveStreamingSessionFinishHandler?
)

startJPEGImageLiveStreaming을 참고하세요.

콜백 값

Handler의미
sessionStartCompletionHandlersuccess, error실시간 스트리밍 세션의 시작 여부를 보고합니다.
jpegDataReceivedHandlerjpegData완전한 JPEG 이미지 하나를 Data / NSData로 전달합니다.
sessionFinishHandlerisUserInitiatedStop, error최종 세션 결과와 사용자가 중지를 요청했는지 여부를 보고합니다.

반환 값

메서드는 값을 직접 반환하지 않습니다. 미디어와 수명 주기 결과는 handler를 통해 전달됩니다.

사용 예제

Swift
guard let streamingDevice = device as? LiveStreamingAPI,
    streamingDevice.supportsJPEGImageLiveStreaming
else { return }

streamingDevice.startJPEGImageLiveStreaming(
    withSessionStartCompletionHandler: { success, error in
        DispatchQueue.main.async {
            self.setStreamingActive(success)
            if let error { self.show(error) }
        }
    },
    jpegDataReceivedHandler: { jpegData in
        // Decode away from the UI update, then assign the image on the main queue.
        guard let image = UIImage(data: jpegData) else { return }
        DispatchQueue.main.async {
            self.imageView.image = image
        }
    },
    sessionFinishHandler: { userStopped, error in
        DispatchQueue.main.async {
            self.setStreamingActive(false)
            self.handleFinish(userStopped: userStopped, error: error)
        }
    }
)

오류 처리

  • 유효하지 않은 JPEG 데이터는 거부하고 마지막 유효 이미지를 유지하세요.
  • sessionStartCompletionHandler 실패는 세션 시작 실패로 처리하세요.
  • sessionFinishHandler에서 사용자 중지와 예기치 않은 중단을 구분하고 error가 있으면 처리하세요.
  • SDK가 제공하는 콜백 순서 외에 프레임 손실, 프레임률 또는 순서 보장을 임의로 가정하지 마세요.

권장 사항

  1. 모든 JPEG 프레임을 보관하지 마세요. 표시 이미지를 교체하거나 크기가 제한된 buffer를 사용하세요.
  2. 콜백이 밀리지 않도록 이미지 디코딩과 UI 반영 작업을 가볍게 유지하세요.
  3. 새 세션을 시작할 때 프레임 카운터와 표시 상태를 초기화하세요.
  4. 기능을 종료할 때 이미지 뷰만 숨기지 말고 stopLiveStreaming()을 호출하세요.

참고

  • 공개 SDK는 고정 JPEG 해상도나 프레임률을 정의하지 않습니다.
  • JPEG 모드에는 AIBudsLiveStream 재생 클래스가 필요하지 않습니다.
  • jpegDataReceivedHandler는 raw pixel buffer가 아니라 압축된 JPEG 데이터를 제공합니다.