JPEG 画像ライブストリーミング
デバイスの JPEG ライブストリーミングモードを開始し、SDK から届く完全な JPEG 画像を順次描画します。
前提条件
- デバイスが接続済みで使用可能な状態にあり、
LiveStreamingAPIに準拠していること。 supportsJPEGImageLiveStreamingがtrueであること。- データコールバックをブロックせず、UI で画像をデコードして差し替えられること。
API Reference
フレームワーク
AIBuds.xcframework
インポート
- Swift
- Objective-C
import AIBuds
import UIKit#import <AIBuds/AIBuds-Swift.h>
#import <AIBuds/AIBuds.h>
#import <UIKit/UIKit.h>プロパティ
- Swift
- Objective-C
/// Whether JPEG image live streaming is supported
var supportsJPEGImageLiveStreaming: Bool { get }/// Whether JPEG image live streaming is supported.
@property(nonatomic, readonly) BOOL supportsJPEGImageLiveStreaming;インスタンスメソッド
- Swift
- Objective-C
/// 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?
)/// Start JPEG image live streaming
/// - Parameters:
/// - sessionStartCompletionHandler: Session start completion handler
/// - jpegDataReceivedHandler: JPEG data received handler
/// - sessionFinishHandler: Session finish handler
- (void)
startJPEGImageLiveStreamingWithSessionStartCompletionHandler:
(AIBudsLiveStreamingSessionStartCompletionHandler _Nullable)sessionStartCompletionHandler
jpegDataReceivedHandler:
(AIBudsLiveStreamingJpegDataReceivedHandler _Nullable)
jpegDataReceivedHandler
sessionFinishHandler:
(AIBudsLiveStreamingSessionFinishHandler _Nullable)
sessionFinishHandler;startJPEGImageLiveStreaming を参照してください。
コールバック値
| ハンドラー | 値 | 意味 |
|---|---|---|
sessionStartCompletionHandler | success, error | ライブストリーミングセッションの開始結果。 |
jpegDataReceivedHandler | jpegData | 完全な JPEG 画像 1 枚を Data / NSData として通知。 |
sessionFinishHandler | isUserInitiatedStop, error | セッションの最終結果と、ユーザー操作による停止かどうかを通知。 |
戻り値
このメソッドは値を直接返しません。メディアとライフサイクルの結果は各ハンドラーから通知されます。
使用例
- Swift
- Objective-C
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)
}
}
)id<AIBudsLiveStreamingAPI> streamingDevice = (id<AIBudsLiveStreamingAPI>)self.device;
if (![streamingDevice conformsToProtocol:@protocol(AIBudsLiveStreamingAPI)] ||
!streamingDevice.supportsJPEGImageLiveStreaming) {
return;
}
__weak typeof(self) weakSelf = self;
[streamingDevice
startJPEGImageLiveStreamingWithSessionStartCompletionHandler:^(BOOL success, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf setStreamingActive:success];
if (error)
[weakSelf showError:error];
});
}
jpegDataReceivedHandler:^(NSData *jpegData) {
UIImage *image = [UIImage imageWithData:jpegData];
if (!image)
return;
dispatch_async(dispatch_get_main_queue(), ^{
weakSelf.imageView.image = image;
});
}
sessionFinishHandler:^(BOOL userStopped, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf setStreamingActive:NO];
[weakSelf handleFinishUserStopped:userStopped error:error];
});
}];エラー処理
- 不正な JPEG データは破棄し、最後の有効な画像を保持します。
sessionStartCompletionHandlerの失敗はセッション開始失敗として扱います。sessionFinishHandlerではユーザー停止と中断を区別し、errorがあれば処理します。- SDK のコールバック順序を超えて、フレーム欠落、フレームレート、順序保証を推測しないでください。
ベストプラクティス
- すべての JPEG フレームを保持せず、表示画像を差し替えるか上限付きバッファを使用します。
- コールバックが滞留しないよう、画像デコードと UI 反映を軽量に保ちます。
- 新しいセッション開始時にフレームカウンターと表示状態をリセットします。
- 機能を終了するときは画像 View を隠すだけでなく、
stopLiveStreaming()を呼び出します。
注意事項
- 公開 SDK では JPEG の固定解像度やフレームレートを規定していません。
- JPEG モードでは
AIBudsLiveStreamの再生クラスは不要です。 jpegDataReceivedHandlerが提供するのは圧縮済み JPEG データであり、未圧縮のピクセルバッファではありません。