すべてのプロダクト
Search
ドキュメントセンター

:機能

最終更新日:Jan 12, 2025

このトピックでは、iOS 用 Push SDK の使用方法と iOS 用 Push SDK のメソッドについて説明します。このトピックでは、関連機能を使用するためのサンプルコードも提供します。

説明

モバイルデバイスでストリームを取り込む方法については、「ストリームの取り込み、ストリームのプル、およびストリーミング」をご参照ください。

機能

  • リアルタイムメッセージングプロトコル ( RTMP ) を介したストリームの取り込みをサポートします。

  • 共同ストリーミングとバトルをサポートします。

  • ビデオエンコーディングには H.264 を、オーディオエンコーディングには Advanced Audio Coding ( AAC ) を採用しています。

  • ビットレート制御、解像度、表示モードなどの機能のカスタム設定をサポートします。

  • さまざまなカメラ操作をサポートします。

  • リアルタイムレタッチとカスタムレタッチ効果をサポートします。

  • アニメーションステッカーをアニメーションウォーターマークとして追加したり、アニメーションステッカーを削除したりできます。

  • ライブストリーム録画をサポートします。

  • YUV やパルス符号変調 ( PCM ) など、さまざまな形式の外部オーディオおよびビデオ入力をサポートします。

  • 複数のストリームのミキシングをサポートします。

  • オーディオのみおよびビデオのみのストリームの取り込みと、バックグラウンドでのストリームの取り込みをサポートします。

  • バックグラウンドミュージック ( BGM ) と BGM 管理をサポートします。

  • ストリームからのスナップショットのキャプチャをサポートします。

  • 自動再接続とエラー処理をサポートします。

  • オーディオ 3A アルゴリズムをサポートします。

  • ビデオファイルのソフトウェアエンコーディングモードとハードウェアエンコーディングモードを切り替えることができます。これにより、エンコーディングモジュールの安定性が向上します。

制限

iOS 用 Push SDK を使用する場合、次の点に注意してください。

  • ストリームの取り込み前に画面の向きを設定する必要があります。ライブストリーミング中に画面を回転させることはできません。

  • 横向きモードでストリームを取り込むには、画面の自動回転を無効にする必要があります。

  • ハードウェアエンコーディングモードでは、エンコーダーとの互換性を保つために、出力解像度の値は 16 の倍数である必要があります。たとえば、解像度を 540p に設定すると、出力解像度は 544 × 960 になります。黒いバーを防ぐには、出力解像度に比例するプレーヤービューサイズを設定する必要があります。

手順

次の表は、iOS ベーシックエディション用 Push SDK を使用するための手順を示しています。

手順

説明

参照

1. iOS 用 Push SDK を登録します。

ライセンスを設定し、iOS 用 Push SDK を登録します。登録メソッドを呼び出さないと、ストリーム取り込み機能を使用できません。

iOS 用 Push SDK の登録

2. ストリーム取り込みパラメーターを設定します。

基本パラメーター、ビットレート制御モード、適応解像度機能、レタッチ機能など、ストリーム取り込みの設定を完了します。

ストリーム取り込みパラメーターの設定 ( ベーシックエディション )

3: iOS 用 Push SDK を使用してストリームを取り込みます

iOS 用 Push SDK を初期化し、ストリーム取り込みコールバックを登録し、プレビュービューを作成した後、ストリームの取り込みを開始できます。ビジネス要件に基づいて、ストリームの管理、BGM の設定、カメラ設定の設定、ライブクイズの有効化、外部オーディオソースの取り込み、アニメーションステッカーの追加を行うことができます。

注記

ApsaraVideo Live では、複数のストリームを同時に 1 つの取り込み URL に取り込むことはできません。複数のストリームを同時に取り込もうとすると、最初のストリームのみが取り込まれます。

iOS ベーシックエディション用 Push SDK の使用

4. ( オプション ) 画面録画のストリーム取り込みを設定します。

画面録画のストリーム取り込みを行う場合は、関連設定を完了します。

画面録画のストリーム取り込みの設定 ( ベーシックエディション )

次の表は、iOS インタラクティブエディション用 Push SDK を使用するための手順を示しています。

手順

説明

参照

1. iOS 用 Push SDK を登録します。

ライセンスを設定し、iOS 用 Push SDK を登録します。登録メソッドを呼び出さないと、ストリーム取り込み機能を使用できません。

iOS 用 Push SDK の登録

2. 共同ストリーミング設定を設定します。

iOS インタラクティブエディション用 Push SDK を使用すると、ストリーマーと視聴者の間で 300 ミリ秒以内の超低レイテンシで共同ストリーミングを実現できます。

共同ストリーミング設定の設定 ( インタラクティブエディション )

iOS 用 Push SDK の登録

iOS 用 Push SDK V4.4.2 以降は、オールインワンライセンスサービスと統合されています。SDK の機能を使用するには、iOS 用 Push SDK を登録する必要があります。詳細については、「Push SDK ライセンスの統合」をご参照ください。

ストリーム取り込みパラメーターの設定 ( ベーシックエディション )

AlivcLivePushConfig クラスを使用して、ストリーム取り込みパラメーターを設定できます。各パラメーターにはデフォルト値があります。パラメーターのデフォルト値と有効値の詳細については、AlivcLivePusher ドキュメント とAlivcLivePusher_Interactive ドキュメント、またはサンプルコード内のコメントを参照してください。

説明

ストリーム取り込み中にこれらのパラメーターをリアルタイムで変更するには、AlivcLivePusher クラスによって提供されるプロパティとメソッドを参照してください。

  1. 基本的なストリーム取り込み設定を完了します。

    次のステートメントを実行して、AlivcLivePusher が必要なビューコントローラーにヘッダーファイルをインポートします : #import <AlivcLivePusher/AlivcLivePusher.h>。サンプルコード :

    AlivcLivePushConfig *config = [[AlivcLivePushConfig alloc] init];// AlivcLivePushConfig クラスを初期化します。initWithResolution メソッドを使用して初期化することもできます。
    config.resolution = AlivcLivePushResolution540P; // デフォルトでは、解像度は 540p に設定されています。最大解像度は 720p です。
    config.fps = AlivcLivePushFPS20; // フレームレートは 20 フレーム/秒 ( FPS ) に設定することをお勧めします。
    config.enableAutoBitrate = true; // 適応ビットレートストリーミングを有効にするかどうかを指定します。デフォルト値 : true。
    config.videoEncodeGop = AlivcLivePushVideoEncodeGOP_2;// デフォルトのキーフレーム間隔は 2 です。キーフレーム間隔が長いほど、レイテンシが大きくなります。キーフレーム間隔は 1 ~ 2 の値に設定することをお勧めします。
    config.connectRetryInterval = 2000; // 再接続間隔 ( ミリ秒単位 )。デフォルトの再接続間隔は 2 秒です。再接続間隔は 1 秒より短くすることはできません。デフォルト値を使用することをお勧めします。
    config.previewMirror = false; // previewMirror パラメーターのデフォルト値は false です。デフォルト値を使用することをお勧めします。
    config.orientation = AlivcLivePushOrientationPortrait; // デフォルトでは、プレビューは縦向きモードです。向きを横向き左または横向き右に変更できます。

    説明
    • 携帯電話の性能とネットワーク帯域幅の要件に基づいて、解像度を 540p に設定することをお勧めします。ほとんどの場合、ライブストリーミング用メインストリームアプリの解像度は 540p です。

    • 基本的なストリーム取り込み設定の各パラメーターにはデフォルト値があります。デフォルト値を使用することをお勧めします。

    • 適応ビットレートストリーミングが無効になっている場合、ビットレートは初期値に固定され、指定された最大ビットレートと最小ビットレートの間で自動的に調整されません。この場合、ネットワークが不安定なときに途切れが発生する可能性があります。この機能を無効にする前に、注意して進めてください。

  2. ビットレート制御モードを設定します。

    次の表は、iOS 用 Push SDK によって提供されるビットレート制御モードを示しています。ビジネス要件に基づいてパラメーターを変更します。

    ビットレート制御モード

    説明

    サンプルコード

    AlivcLivePushQualityModeResolutionFirst

    品質優先モード。iOS 用 Push SDK は、ビデオストリームの品質を優先するようにビットレートパラメーターを設定します。

    config.qualityMode = AlivcLivePushQualityModeResolutionFirst; // デフォルトでは、品質優先モードが使用されます。モードをスムーズ優先またはカスタムモードに変更できます。

    AlivcLivePushQualityModeFluencyFirst

    スムーズ優先モード。iOS 用 Push SDK は、ビデオストリームのスムーズさを優先するようにビットレートパラメーターを設定します。

    config.qualityMode = AlivcLivePushQualityModeFluencyFirst; // デフォルトでは、スムーズ優先モードが使用されます。モードを品質優先またはカスタムモードに変更できます。

    AlivcLivePushQualityModeCustom

    カスタムモード。iOS 用 Push SDK は、カスタム設定に基づいてビットレートパラメーターを設定します。カスタムモードを使用する場合は、初期ビットレート、最小ビットレート、最大ビットレートを指定する必要があります。

    • initialVideoBitrate : ライブストリーム開始時の初期ビットレート。

    • minVideoBitrate : ネットワーク状態が悪い場合、途切れを防ぐためにビットレートは徐々に最小ビットレートまで低下します。

    • targetVideoBitrate : ネットワーク状態が良い場合、ビデオストリームの品質を向上させるためにビットレートは徐々に最大ビットレートまで増加します。

    config.qualityMode = AlivcLivePushQualityModeCustom// カスタムモードを選択します。
    config.targetVideoBitrate = 1400; // 最大ビットレートは 1,400 Kbit/s です。
    config.minVideoBitrate = 600; // 最小ビットレートは 600 Kbit/s です。
    config.initialVideoBitrate = 1000; // 初期ビットレートは 1,000 Kbit/s です。
    説明
    • 品質優先モードまたはスムーズ優先モードを使用する場合、initialVideoBitrate、minVideoBitrate、targetVideoBitrate パラメーターを設定する必要はありません。ネットワークジッターが発生した場合、iOS 用 Push SDK はビデオストリームの品質またはスムーズさを自動的に優先します。

    • カスタムモードを使用する場合は、推奨設定に基づいてビットレート設定を完了します。次の表は、推奨設定を示しています。

    表 1. 品質を優先するカスタムモードの推奨設定

    解像度

    initialVideoBitrate

    minVideoBitrate

    targetVideoBitrate

    360p

    600

    300

    1000

    480p

    800

    300

    1200

    540p

    1000

    600

    1400

    720p

    1500

    600

    2000

    1080p

    1800

    1200

    2500

    表 2. スムーズさを優先するカスタムモードの推奨設定

    解像度

    initialVideoBitrate

    minVideoBitrate

    targetVideoBitrate

    360p

    400

    200

    600

    480p

    600

    300

    800

    540p

    800

    300

    1000

    720p

    1000

    300

    1200

    1080p

    1500

    1200

    2200

  3. 適応解像度機能を設定します。

    適応解像度を有効にすると、ネットワーク状態が悪い場合にビデオストリームのスムーズさと品質を確保するために、解像度が自動的に低下します。サンプルコード :

    config.enableAutoResolution = YES; // 適応解像度を有効にするかどうかを指定します。デフォルト値 : NO。
    重要
    • 適応解像度機能は、すべてのプレーヤーでサポートされているわけではありません。この機能を使用する必要がある場合は、ApsaraVideo Player を使用することをお勧めします。

    • 適応解像度機能は、AlivcQualityModeEnum パラメーターを設定して品質優先モードまたはスムーズ優先モードを使用する場合にのみ有効になります。カスタムモードを使用している場合、この機能は使用できません。

  4. レタッチ機能を設定します。

    iOS 用 Push SDK は、基本レタッチと高度レタッチの 2 つのレタッチモードを提供します。基本レタッチ効果には、美白、美肌、チークが含まれます。顔認識に基づく高度なレタッチ効果には、美白、美肌、チーク、大きな目、顔のサイズ変更、顔の痩身が含まれます。詳細については、「概要」をご参照ください。サンプルコード :

    # pragma mark - 「レタッチ効果と関連メソッド」
    /**
     * @brief レタッチ効果を有効または無効にするかを指定します。
     * @param type レタッチ効果。QueenBeautyType パラメーターの値です。
     * @param isOpen レタッチ効果を有効にするかどうかを指定します。有効な値 : YES と NO。
     *
     */
    - (void)setQueenBeautyType:(kQueenBeautyType)type enable:(BOOL)isOpen;
    /**
     * @brief レタッチパラメーターを指定します。
     * @param param レタッチパラメーター。QueenBeautyParams パラメーターの値です。
     * @param value パラメーター値。有効な値 : [0,1]。元の値が 0 より小さい場合は、値を 0 に設定します。元の値が 1 より大きい場合は、値を 1 に設定します。
     */
    - (void)setQueenBeautyParams:(kQueenBeautyParams)param
    value:(float)value;
    # pragma mark - 「フィルターのメソッド」
    /**
     * @brief フィルターマテリアルを指定します。フィルターマテリアルを指定する前に、kQueenBeautyTypeLUT パラメーターを指定してフィルターを有効にします。
     * @param imagePath フィルターマテリアルのパス。
     */
    - (void)setLutImagePath:(NSString *)imagePath;
    # pragma mark - 「顔の整形メソッド」
    /**
     * @brief 顔の整形効果を指定します。顔の整形効果を指定する前に、kQueenBeautyTypeFaceShape パラメーターを指定して顔の整形を有効にします。
     * @param faceShapeType 顔の整形効果。QueenBeautyFaceShapeType パラメーターの値です。
     * @param value パラメーター値。
     */
    - (void)setFaceShape:(kQueenBeautyFaceShapeType)faceShapeType
    value:(float)value;
    # pragma mark - 「メイクアップのメソッド」
    /**
     * @brief メイクアップタイプとメイクアップマテリアルのパスを指定します。メイクアップタイプとパスを指定する前に、kQueenBeautyTypeMakeup パラメーターを指定してメイクアップを有効にします。
     * @param makeupType メイクアップタイプ。
     * @param imagePaths メイクアップマテリアルのパス。
     * @param blend 混合メイクアップのタイプ。
     */
    - (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
    paths:(NSArray<NSString *> *)imagePaths
    blendType:(kQueenBeautyBlend)blend;
    /**
     * @brief メイクアップタイプとメイクアップマテリアルのパスを指定します。
     * @param makeupType メイクアップタイプ。
     * @param imagePaths メイクアップマテリアルのパス。
     * @param blend 混合メイクアップのタイプ。
     * @param fps フレームレート。
     */
    - (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
    paths:(NSArray<NSString *> *)imagePaths
    blendType:(kQueenBeautyBlend)blend fps:(int)fps;
    /**
     * @brief メイクアップタイプの透明度を指定します。性別を指定できます。
     * @param makeupType メイクアップタイプ。
     * @param isFeMale 性別が女性かどうかを指定します。有効な値 : YES と NO。
     * @param alpha メイクアップタイプの透明度。
     */
    - (void)setMakeupAlphaWithType:(kQueenBeautyMakeupType)makeupType
    female:(BOOL)isFeMale alpha:(float)alpha;
    /**
     * @brief 混合メイクアップのタイプを指定します。
     * @param makeupType メイクアップタイプ。
     * @param blend 混合メイクアップのタイプ。
     */
    - (void)setMakeupBlendWithType:(kQueenBeautyMakeupType)makeupType
    blendType:(kQueenBeautyBlend)blend;
    /**
     * @brief すべてのメイクアップ効果をクリアします。
     */
    - (void)resetAllMakeupType;
  5. バックグラウンドストリーム取り込みの画像を指定します。

    iOS 用 Push SDK を使用すると、アプリケーションがバックグラウンドに切り替えられたとき、またはビットレートが低いときに画像を取り込むことができます。これにより、ユーザーエクスペリエンスが向上します。アプリケーションがバックグラウンドに切り替えられると、ビデオストリームの取り込みは一時停止されます。この場合、オーディオストリームのみが取り込まれます。この場合、取り込みたい画像を指定できます。たとえば、ストリーマーはすぐに復帰します。などのメッセージが表示された画像を取り込んで、視聴者に通知できます。サンプルコード :

    config.pauseImg = [UIImage imageNamed:@"image.png"]; // アプリケーションがバックグラウンドに切り替えられたときにストリーム取り込みを行う画像を指定します。

    ネットワーク状態が悪い場合に、ストリームインジェスト用の静止画像を指定できます。ビットレートが低い場合、指定した画像が取り込まれ、途切れを防ぎます。サンプルコード:

    config.networkPoorImg = [UIImage imageNamed:@"image.png"]; // ネットワーク状態が悪い場合のストリーム取り込み用の画像を指定します。
  6. ウォーターマークを設定します。

    iOS 用 Push SDK は、ウォーターマーク機能を提供します。複数のウォーターマークを追加できます。ウォーターマークは PNG 形式である必要があります。サンプルコード:

    NSString *watermarkBundlePath = [[NSBundle mainBundle] pathForResource:
    [NSString stringWithFormat:@"watermark"] ofType:@"png"]; // ウォーターマークのパスを指定します。
    [config addWatermarkWithPath: watermarkBundlePath
     watermarkCoordX:0.1
     watermarkCoordY:0.1
     watermarkWidth:0.3]; // ウォーターマークを追加します。
    説明
    • watermarkCoordX、watermarkCoordY、および watermarkWidth パラメーターの値は相対値です。たとえば、watermarkCoordX パラメーターの値が 0.1 の場合、ウォーターマークの左端が、取り込まれるビデオ画像の x 軸の 10% の位置にあることを示します。したがって、ストリームの解像度が 540 × 960 の場合、watermarkCoordX パラメーターの値は 54 です。

    • ウォーターマークの高さは、ソース画像のアスペクト比とウォーターマークの入力幅の値に基づいてスケーリングされます。

    • テキストウォーターマークを追加する場合は、テキストを画像に変換し、addWaterMark メソッドを呼び出して、画像をウォーターマークとして追加できます。

    • ウォーターマークのエッジの鮮明さと滑らかさを確保するために、指定された出力サイズのソース画像を使用することをお勧めします。たとえば、出力解像度が 544 × 940 で、watermarkWidth パラメーターの値が 0.1 に設定されている場合、次の式を使用して計算されたソース画像の幅を使用することをお勧めします。544 × 0.1 = 54.4 です。

  7. プレビューモードを指定します。

    Push SDK for iOS は、3 つのプレビューモードをサポートしています。プレビュー表示モードは、ストリームの取り込みには影響しません。

    • ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: このモードでは、ビデオはプレビューウィンドウ全体を占めます。ビデオのアスペクト比がプレビューウィンドウのアスペクト比と異なる場合、プレビュー時に画像は引き伸ばされます。

    • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: このモードでは、プレビュー時にビデオの元の縦横比が使用されます。ビデオのアスペクト比がプレビューウィンドウのアスペクト比と異なる場合、プレビュー時に画像に黒いバーが追加されます。これはデフォルトのプレビューモードです。

    • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: このモードでは、プレビュー時にビデオがプレビューウィンドウに合わせてトリミングされます。ビデオのアスペクト比がプレビューウィンドウのアスペクト比と異なる場合、プレビュー時にビデオがトリミングされます。

    サンプルコード:

    mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);
    説明
    • AlivcLivePushConfig クラスでプレビューモードを指定できます。また、 setpreviewDisplayMode メソッドを呼び出して、プレビューおよびストリームの取り込み中にプレビューモードを指定することもできます。

    • この設定はプレビューにのみ適用されます。出力ビデオの実際の解像度は、AlivcLivePushConfig クラスで設定された解像度に従います。プレビューモードは実際の解像度には影響しません。携帯電話のさまざまな画面サイズに適応するようにプレビューモードを選択できます。

iOS Basic Edition 用 Push SDK

AlivcLivePusher は、iOS 用 Push SDK の主要クラスです。 AlivcLivePusher クラスは、カメラプレビュー、ストリームインジェストコールバック、ストリームインジェスト制御、ストリームインジェスト中のパラメーター変更などの機能を提供します。 このセクションでは、ストリームインジェストの主要なメソッドの使用方法について説明します。

  1. インスタンスを初期化する

    ストリームインジェストのパラメーターを設定した後、iOS 用 Push SDK の initWithConfig メソッドを使用してインスタンスを初期化できます。 サンプルコード:

    self.livePusher = [[AlivcLivePusher alloc] initWithConfig:config];
    説明

    AlivcLivePusher クラスは複数のインスタンスをサポートしていません。 したがって、initWithConfig メソッドの呼び出しごとに destroy メソッドを 1 回呼び出す必要があります。

  2. ストリームインジェストコールバックを登録する。

    次のストリームインジェストコールバックがサポートされています。

    • 情報: 通知とステータス検出に使用されるコールバック。

    • エラー: エラー発生時に返されるコールバック。

    • ネットワーク: ネットワークに関連するコールバック。

    デリゲートメソッドを使用してコールバックを受信できます。 サンプルコード:

    [self.livePusher setInfoDelegate:self];
    [self.livePusher setErrorDelegate:self];
    [self.livePusher setNetworkDelegate:self];
  3. プレビューを開始する。

    livePusher オブジェクトを初期化した後、プレビューを開始できます。 UIView クラスでビューインスタンスを作成するか、UIView を継承するクラスを使用してプレビューを開始します。 サンプルコード:

    [self.livePusher startPreview:self.view];
  4. ストリームインジェストを開始する。

    プレビューが成功した後でのみ、ストリームインジェストを開始できます。 したがって、次のコードを追加して、AlivcLivePusherInfoDelegate クラスの onPreviewStarted コールバックを指定する必要があります。

    [self.livePusher startPushWithURL:@"テスト用インジェスト URL (rtmp://......)"];
    説明

    iOS 用 Push SDK では、startPushWithURLAsync メソッドを呼び出して、非同期でストリームインジェストを開始できます。

    iOS 用 Push SDK は、RTMP および Real-Time Streaming Protocol (RTSP) を介したストリームインジェストをサポートしています。 RTMP と比較して、RTSP はより安定しており、ネットワーク状態が悪い場合のパフォーマンスが向上しています。 RTSP を介したストリームインジェストをお勧めします。 RTMP と RTSP の比較、および RTS を介したストリームインジェストの詳細については、「RTS を介したストリームインジェスト」をご参照ください。

    有効なインジェスト URL を使用してストリームインジェストを開始した後、ApsaraVideo Player、FFplay、Video Lan Client (VLC) などのプレーヤーを使用してストリームプルのテストを行うことができます。 ストリーミング URL の取得方法については、「インジェスト URL とストリーミング URL を生成する」をご参照ください。

  5. その他のストリームインジェスト設定を完了する。

    iOS 用 Push SDK を使用すると、ストリームインジェストを管理できます。 たとえば、ストリームインジェストの開始、停止、再起動、一時停止、再開、プレビューの停止、ストリームインジェストオブジェクトの破棄を行うことができます。 ビジネス要件に基づいて、これらの操作を実行するためのボタンを追加できます。 サンプルコード:

    /* pauseImage パラメーターを設定した後、pause メソッドを呼び出して、カメラインジェストから画像インジェストに切り替えます。 オーディオストリームは引き続きインジェストされます。 */
    [self.livePusher pause];
    /* 画像インジェストからカメラインジェストに切り替えます。 オーディオストリームは引き続きインジェストされます。 */
    [self.livePusher resume];
    /* インジェストされているストリームを停止します。 */
    [self.livePusher stopPush];
    /* プレビューを停止します。 ただし、この操作は、インジェストされているストリームには影響しません。 プレビューが停止すると、プレビューウィンドウは最後のフレームでフリーズします。 */
    [self.livePusher stopPreview];
    /* ストリームがインジェストされている場合、またはエラーコールバックが返された場合に、ストリームインジェストを再起動します。 エラーが発生した場合、このメソッドまたは reconnectPushAsync メソッドのみを使用してストリームインジェストを再起動できます。 また、destroy メソッドを呼び出して、ストリームインジェストインスタンスを破棄することもできます。 その後、プレビューやストリームインジェストなどの操作に必要なすべての ALivcLivePusher リソースを再起動できます。 */
    [self.livePusher restartPush];
    /* ストリームがインジェストされている場合、または AlivcLivePusherNetworkDelegate に関連するエラーコールバックが返された場合に、このメソッドを呼び出します。 エラーが発生した場合、このメソッドまたは restartPush メソッドのみを使用してストリームインジェストを再起動できます。 また、destroy メソッドを呼び出して、ストリームインジェストインスタンスを破棄することもできます。 その後、RTMP 経由でストリームインジェストを再起動できます。 */
    [self.livePusher reconnectPushAsync];
    /* ストリームインジェストインスタンスを破棄します。 このメソッドを呼び出すと、ストリームインジェストとプレビューが停止し、プレビューウィンドウが削除されます。 AlivcLivePusher クラスに関連するすべてのリソースが破棄されます。 */
    [self.livePusher destory];
    self.livePusher = nil;
    /* ストリームインジェストのステータスを照会します。 */
    AlivcLivePushStatus status = [self.livePusher getLiveStatus];
  6. リアルタイムでレタッチ効果のレベルを調整する。

    iOS 用 Push SDK では、レタッチパラメーターの指定、レタッチ効果の有効化、リアルタイムでのパラメーター値の変更を行うことができます。 詳細については、「概要」をご参照ください。 サンプルコード:

    [_queenEngine setQueenBeautyType:kQueenBeautyTypeSkinBuffing enable:YES];
    [_queenEngine setQueenBeautyType:kQueenBeautyTypeSkinWhiting enable:YES];
    [_queenEngine setQueenBeautyParams:kQueenBeautyParamsWhitening value:0.8f];
    [_queenEngine setQueenBeautyParams:kQueenBeautyParamsSharpen value:0.6f];
    [_queenEngine setQueenBeautyParams:kQueenBeautyParamsSkinBuffing value:0.6];
  7. BGM を管理する。

    iOS 用 Push SDK は、BGM 再生、BGM ミックス、ノイズリダクション、インイヤーモニタリング、ミュートなどの機能を提供します。 プレビューの開始後に、BGM に関連するメソッドを呼び出すことができます。 サンプルコード:

    /* BGM の再生を開始します。 */
    [self.livePusher startBGMWithMusicPathAsync:musicPath];
    /* BGM の再生を停止します。 BGM を変更する場合は、BGM の再生を開始するために使用されるメソッドを呼び出します。 現在の BGM の再生を停止する必要はありません。 */
    [self.livePusher stopBGMAsync];
    /* BGM の再生を一時停止します。 このメソッドは、BGM の再生が開始された後にのみ呼び出すことができます。 */
    [self.livePusher pauseBGM];
    /* BGM の再生を再開します。 このメソッドは、BGM の再生が一時停止された後にのみ呼び出すことができます。 */
    [self.livePusher resumeBGM];
    /* BGM のループ再生を有効にします。 */
    [self.livePusher setBGMLoop:true];
    /* ノイズリダクションを設定します。 ノイズリダクションを有効にすると、システムは収集されたオーディオから非音声部分をフィルタリングします。 この機能により、人間の声のボリュームがわずかに減少する場合があります。 ユーザーがこの機能を有効にするかどうかを決定できるようにすることをお勧めします。 デフォルトでは、この機能は無効になっています。 */
    [self.livePusher setAudioDenoise:true];
    /* インイヤーモニタリングを設定します。 インイヤーモニタリングは、カラオケを含むシナリオに適用できます。 インイヤーモニタリングを有効にすると、ストリーミング中にイヤホンで自分の声が聞こえます。 インイヤーモニタリングを無効にすると、ストリーミング中にイヤホンで自分の声が聞こえません。 イヤホンが検出されない場合、この機能は有効になりません。 */
    [self.livePusher setBGMEarsBack:true];
    /* オーディオミキシングを設定します。 BGM と人間の声のボリュームを調整できます。 */
    [self.livePusher setBGMVolume:50]; // BGM のボリュームを指定します。
    [self.livePusher setCaptureVolume:50]; // 人間の声のボリュームを指定します。
    /* ミュートを設定します。 この機能を有効にすると、BGM と人間の声がミュートされます。 BGM または人間の声を個別にミュートするには、ミックス BGM のボリュームを設定するために使用されるメソッドを呼び出します。 */
    [self.livePusher setMute:isMute?true:false];
  8. ストリームインジェストスナップショットを設定する。

    iOS 用 Push SDK は、ローカルビデオストリームのスナップショットキャプチャ機能を提供します。 サンプルコード:

    /* スナップショットキャプチャのコールバックを設定します。 */
    [self.livePusher setSnapshotDelegate:self];
    /* snapshot メソッドを呼び出します。 */
    [self. livePusher snapshot:1 interval:1];
  9. カメラ関連の操作を実行する。

    ストリーミング、一時停止、または再接続状態のプレビューを開始した後にのみ、カメラ関連の操作を実行できます。 たとえば、前面カメラと背面カメラを切り替えたり、フラッシュ、焦点距離、ズーム、ミラーリングモードを設定したりできます。 プレビューを開始しない場合、次のメソッドは無効です。 サンプルコード:

    /* 前面カメラと背面カメラを切り替えます。 */
    [self.livePusher switchCamera];
    /* フラッシュを有効にするか無効にするかを指定します。 前面カメラのフラッシュを有効にすることはできません。 */
    [self.livePusher setFlash:false]; 
    /* 焦点距離を調整してズームインまたはズームアウトします。 入力パラメーターを正の数に設定すると、焦点距離が長くなります。 入力パラメーターを負の数に設定すると、焦点距離が短くなります。 */
    CGFloat max = [_livePusher getMaxZoom];
    [self.livePusher setZoom:MIN(1.0, max)]; 
    /* 手動フォーカスを設定します。 手動フォーカスを設定するには、point と autoFocus の 2 つのパラメーターを指定する必要があります。 point パラメーターは、フォーカスポイントの座標を指定します。 autoFocus パラメーターは、オートフォーカスを有効にするかどうかを指定します。 autoFocus パラメーターは、この設定に対してのみ有効です。 それ以外の場合のオートフォーカスの有効/無効は、setAutoFocus メソッドによって決まります。 */
    [self.livePusher focusCameraAtAdjustedPoint:CGPointMake(50, 50) autoFocus:true];
    /* オートフォーカスを設定します。 */
    [self.livePusher setAutoFocus:false];
    /* ミラーリングモードを設定します。 PushMirror メソッドと PreviewMirror メソッドは、ミラーリングに使用されます。 PushMirror メソッドは、ストリームインジェストのミラーリングモードを有効にするために使用されます。 PreviewMirror メソッドは、プレビューのミラーリングモードを有効にするために使用されます。 PushMirror メソッドは、再生画像に対してのみ有効です。 PreviewMirror メソッドは、プレビュービューに対してのみ有効です。 */
    [self.livePusher setPushMirror:false];
    [self.livePusher setPreviewMirror:false];
  10. ライブクイズ機能を有効にする。

    ライブクイズ機能を有効にするには、ライブストリームに Supplemental Enhancement Information (SEI) を挿入し、プレーヤーを使用して SEI を解析する必要があります。 iOS 用 Push SDK は、SEI を挿入するためのメソッドを提供します。 このメソッドは、ストリームがインジェストされている場合にのみ呼び出すことができます。 サンプルコード:

    /*
    sendMessage: ライブストリームに挿入される SEI メッセージ。 SEI メッセージは JSON 形式です。 ApsaraVideo Player SDK は、SEI メッセージを受信して解析できます。
    repeatCount: SEI メッセージが挿入されるフレームの数。 フレームの SEI メッセージがドロップされないようにするには、繰り返しの回数を指定する必要があります。 たとえば、値 100 は、SEI メッセージが後続の 100 フレームに挿入されることを示します。 ApsaraVideo Player SDK は、重複する SEI メッセージを削除します。
    delayTime: フレームが送信されるまでの待機時間。 単位: ミリ秒。
    KeyFrameOnly: キーフレームのみを送信するかどうかを指定します。
    */
    [self.livePusher sendMessage:@"質問に関する情報" repeatCount:100 delayTime:0 KeyFrameOnly:false];
  11. 外部オーディオソースとビデオソースを設定する。

    iOS 用 Push SDK は、オーディオファイルなどのストリームインジェスト用の外部オーディオソースとビデオソースをサポートしています。

    1. ストリームインジェスト設定で外部オーディオソースとビデオソースの入力を設定する。

      config.externMainStream = true;// 外部ストリームの入力を有効にするかどうかを指定します。
      config.externVideoFormat = AlivcLivePushVideoFormatYUVNV21; // ビデオデータの色形式を指定します。 この例では、色形式は YUVNV21 です。 ビジネス要件に基づいて他の形式を使用することもできます。
      config.externAudioFormat = AlivcLivePushAudioFormatS16;// オーディオデータのビット深度形式を指定します。 この例では、ビット深度形式は S16 です。 ビジネス要件に基づいて他の形式を使用することもできます。
    2. 外部ビデオデータをインポートする。

      /* sendVideoData メソッドは、ネイティブの YUV および RGB バッファーデータのみをサポートしています。 sendVideoData メソッドを使用して、バッファー、長さ、幅、高さ、タイムスタンプ、回転角度などのビデオデータを送信できます。 */
      [self.livePusher sendVideoData:yuvData width:720 height:1280 size:dataSize pts:nowTime rotation:0];
      /* CMSampleBufferRef ビデオデータの場合は、sendVideoSampleBuffer メソッドを使用できます。 */
      [self.livePusher sendVideoSampleBuffer:sampleBuffer]
      /* sendVideoData メソッドを使用する前に、CMSampleBufferRef ビデオデータをネイティブバッファーに変換することもできます。 次のサンプルコードは、ビデオデータの変換方法の例を示しています。 */
      // サンプルバッファーの長さを照会します。
      - (int) getVideoSampleBufferSize:(CMSampleBufferRef)sampleBuffer {
      if(!sampleBuffer) {
       return 0;
      }
      int size = 0;
      CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
      CVPixelBufferLockBaseAddress(pixelBuffer, 0);
      if(CVPixelBufferIsPlanar(pixelBuffer)) {
       int count = (int)CVPixelBufferGetPlaneCount(pixelBuffer);
       for(int i=0; i<count; i++) {
       int height = (int)CVPixelBufferGetHeightOfPlane(pixelBuffer,i);
       int stride = (int)CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer,i);
       size += stride*height;
       }
      }else {
       int height = (int)CVPixelBufferGetHeight(pixelBuffer);
       int stride = (int)CVPixelBufferGetBytesPerRow(pixelBuffer);
       size += stride*height;
      }
      CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
      return size;
      }
      // ビデオサンプルバッファーをネイティブバッファーに変換します。
      - (int) convertVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer toNativeBuffer:(void*)nativeBuffer
      {
      if(!sampleBuffer || !nativeBuffer) {
       return -1;
      }
      CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
      CVPixelBufferLockBaseAddress(pixelBuffer, 0);
      int size = 0;
      if(CVPixelBufferIsPlanar(pixelBuffer)) {
       int count = (int)CVPixelBufferGetPlaneCount(pixelBuffer);
       for(int i=0; i<count; i++) {
       int height = (int)CVPixelBufferGetHeightOfPlane(pixelBuffer,i);
       int stride = (int)CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer,i);
       void *buffer = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, i);
       int8_t *dstPos = (int8_t*)nativeBuffer + size;
       memcpy(dstPos, buffer, stride*height);
       size += stride*height;
       }
      }else {
       int height = (int)CVPixelBufferGetHeight(pixelBuffer);
       int stride = (int)CVPixelBufferGetBytesPerRow(pixelBuffer);
       void *buffer = CVPixelBufferGetBaseAddress(pixelBuffer);
       size += stride*height;
       memcpy(nativeBuffer, buffer, size);
      }
      CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
      return 0;
      }
    3. 外部オーディオデータをインポートする。

      /* sendPCMData メソッドは、ネイティブの PCM バッファーデータのみをサポートしています。 このメソッドを使用して、バッファー、長さ、タイムスタンプなどのオーディオデータを送信できます。 */
      [self.livePusher sendPCMData:pcmData size:size pts:nowTime];
  12. アニメーションステッカーを管理する。

    iOS 用 Push SDK を使用すると、アニメーションステッカーをウォーターマークとしてライブストリームに追加できます。

    1. アニメーションステッカーを作成するには、デモディレクトリにある素材を使用および変更できます。 アニメーションステッカーの画像シーケンスを作成します。 config.json ファイルで次のパラメーターを設定します。

      "du": 2.04,// アニメーションステッカーが再生されるたびに表示される時間を指定します。
      "n": "qizi",// アニメーションステッカーの名前を指定します。 画像シーケンスが格納されているフォルダーの名前がアニメーションステッカーの名前と同じであり、各画像の名前がアニメーションステッカーの名前にシーケンス番号が続いていることを確認してください。 例: qizi0。
      "c": 68.0,// フレーム数を指定します。これは、アニメーションステッカーに含まれる画像の数です。
      "kerneframe": 51,// 画像をキーフレームとして指定します。 たとえば、デモディレクトリの 51 番目のフレームをキーフレームとして指定します。 指定したフレームが存在することを確認してください。
      "frameArry": [
       {"time":0,"pic":0},
       {"time":0.03,"pic":1},
       {"time":0.06,"pic":2},
       ],
      // アニメーションステッカーのパラメーターを設定します。 上記のコードでは、"time":0,"pic":0 は、アニメーションステッカーの再生開始から 0 秒後に最初のフレーム qizi0 が表示されることを示します。 "time":0.03,"pic":1 は、アニメーションステッカーの再生開始から 0.03 秒後に 2 番目のフレーム qizi1 が表示されることを示します。 アニメーションステッカーのすべてのフレームを同じ方法で設定します。
      説明

      その他のパラメーターについては、デモディレクトリに用意されている config.json ファイルの値を保持できます。

    2. アニメーションステッカーを追加する。

      /**
      * アニメーションステッカーを追加します。
      * @param path アニメーションステッカーのパス。パスには config.json ファイルが含まれている必要があります。
      * @param x ステッカーの左上頂点の x 座標。有効な値: 0 ~ 1.0f。
      * @param y ステッカーの左上頂点の y 座標。有効な値: 0 ~ 1.0f。
      * @param w ステッカーの幅。有効な値: 0 ~ 1.0f。
      * @param h ステッカーの高さ。有効な値: 0 ~ 1.0f。
      * @return id ステッカーの ID。ステッカーを削除する場合は、ステッカーの ID を指定する必要があります。
      */
      [self.livePusher addDynamicWaterMarkImageDataWithPath: "ステッカーパス" x:0.2f y:0.2f w:0.2f h:0.2f];
    3. アニメーションステッカーを削除する。

      [self.livePusher removeDynamicWaterMark:id];
  13. デバッグツールを設定する。

    DebugView は、問題の診断に使用できる UI デバッグツールです。 DebugView は、デバッグ用にビューの上部に常に表示され、ドラッグ可能なウィンドウを提供します。 DebugView を使用して、ストリームインジェストのログを照会したり、ストリームインジェストパフォーマンスのメトリックをリアルタイムで監視したり、主要なパフォーマンスメトリックの折れ線グラフを生成したりできます。

    説明

    リリースバージョンのアプリでは、DebugView を呼び出すために使用されるメソッドを呼び出さないでください。

    [AlivcLivePusher showDebugView]; // DebugView を開きます。
  14. 他のメソッドを呼び出す。

    /* カスタムモードでは、最小ビットレートと最大ビットレートをリアルタイムで変更できます。 */
    [self.livePusher setTargetVideoBitrate:800];
    [self.livePusher setMinVideoBitrate:200]
    /* ストリームがインジェストされているかどうかを照会します。 */
    BOOL isPushing = [self.livePusher isPushing]; 
    /* インジェスト URL を照会します。 */
    NSString *pushURLString = [self.livePusher getPushURL];
    /* ストリームインジェストパフォーマンスに関するデバッグ情報を照会します。 ストリームインジェストパフォーマンスのパラメーターの詳細については、API リファレンスまたはコード内のコメントを参照してください。 */
    AlivcLivePushStatsInfo *info = [self.livePusher getLivePushStatusInfo];
    /* iOS 用 Push SDK のバージョン番号を照会します。 */
    NSString *sdkVersion = [self.livePusher getSDKVersion];
    /* デバッグ情報をフィルタリングするためのログレベルを指定します。 */
    [self.livePusher setLogLevel:(AlivcLivePushLogLevelDebug)];

画面録画のストリームインジェストの設定(Basic Edition)

ReplayKit は iOS 9 で導入されたフレームワークで、画面の録画を可能にします。 iOS 10 では、ReplayKit を使用して、サードパーティアプリの拡張機能を使用して画面録画をストリーミングできます。 iOS 10 以降では、ApsaraVideo SDK をアプリ拡張機能と組み合わせて使用して、画面録画をストリーミングできます。

システムの安定性を確保するために、iOS は画面録画をキャプチャするアプリ拡張機能に提供するリソースを少なくしています。 アプリ拡張機能が過剰なメモリを占有すると、アプリ拡張機能は終了し、強制終了されます。 この問題を解決するために、iOS 用 Push SDK は、画面録画のストリームインジェストを拡張アプリとホストアプリに指定します。 拡張アプリは、画面録画をキャプチャし、プロセス間通信を使用してキャプチャしたコンテンツをホストアプリに送信するために使用されます。 ホストアプリは、AlivcLivePusher オブジェクトを作成するために使用され、画面録画をクライアントにプッシュします。 ストリームインジェストの全プロセスはホストアプリで実行されます。 ホストアプリで収集された音声の音声収集と送信を設定できます。 拡張アプリは、画面録画のキャプチャにのみ使用されます。

重要

iOS 用 Push SDK のデモディレクトリでは、アプリグループを使用して拡張アプリとホストアプリ間のプロセス間通信を実現しています。 実装ロジックは AlivcLibReplayKitExt.framework ファイルにカプセル化されています。

iOS で画面録画をストリーミングするために、システムは画面録画をキャプチャする拡張アプリを作成します。 iOS で画面録画をストリーミングする手順を以下に示します。

  1. アプリグループを作成します。

    Apple Developer にログインし、以下の操作を実行します。

    1. [Certificates, Identifiers & Profiles] ページで、アプリグループを登録します。 詳細については、「Register an app group」をご参照ください。

    2. [identifiers] ページで、[app Ids] をクリックします。 アプリ ID をクリックして、アプリグループを有効にします。 ホストアプリと拡張アプリの両方のアプリ ID で、上記の手順を実行する必要があります。 詳細については、「Enable app groups」をご参照ください。

    3. 再生成されたプロビジョニングプロファイルをダウンロードし、Xcode でプロビジョニングプロファイルを再設定します。

    これで、拡張アプリはホストアプリと通信できます。

    説明

    アプリグループを作成したら、アプリグループ識別子の値を保存する必要があります。 この値は後続の手順で使用されます。

  2. 拡張アプリを作成します。

    デモディレクトリでは、iOS 用 Push SDK は、画面録画をストリーミングするために AlivcLiveBroadcast および AlivcLiveBroadcastSetupUI アプリ拡張機能を提供しています。 アプリで拡張アプリを作成するには、次の手順を実行します。

    1. プロジェクトで、[File] > [new] > [target…] を選択します。 [broadcast Upload Extension] をクリックします。 次の図に例を示します。image

    2. [product Name] パラメーターを設定し、[include UI Extension] を選択して、[finish] をクリックします。 次の図に例を示します。录屏步骤1.png これにより、ライブストリーミング拡張機能とライブストリーミング UI が作成されます。

    3. 拡張機能の Info.plist ファイルを設定します。 デフォルトでは、Xcode は、作成したターゲットに SampleHandler という名前のヘッダーファイルとソースファイルを作成します。 次の図に例を示します。录屏3.png

      AlivcLibReplayKitExt.framework ファイルをプロジェクトにドラッグします。 これにより、ターゲット拡張機能は AlivcLibReplayKitExt.framework に依存します。 1.pngSampleHandler.m ファイルのコードを次のコードに置き換えます。 コード内の kAPPGroup は、手順 1 で取得したアプリグループ識別子に置き換える必要があります。 サンプルコード:

      #import "SampleHandler.h"
      #import <AlivcLibReplayKitExt/AlivcLibReplayKitExt.h>
      
      @implementation SampleHandler
      
      - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *>
      *)setupInfo {
      
       // ユーザーがブロードキャストの開始をリクエストしました。 UI 拡張機能からの設定情報は提供できますが、オプションです。
       [[AlivcReplayKitExt sharedInstance] setAppGroup:kAPPGROUP];
      }
      
      - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
       if (sampleBufferType != RPSampleBufferTypeAudioMic) {
       // 音声はホストアプリによって収集および送信されます。
       [[AlivcReplayKitExt sharedInstance] sendSampleBuffer:sampleBuffer withType:sampleBufferType];
       }
      }
      
      - (void)broadcastFinished {
      
       [[AlivcReplayKitExt sharedInstance] finishBroadcast];
      }
      @end
      
       

    Broadcast Upload Extension のターゲットがプロジェクトに作成され、AlivcLibReplayKitExt.framework ファイルが画面録画拡張機能用にカスタマイズされます。

  3. iOS 用 Push SDK をホストアプリに統合します。

    ホストアプリで AlivcLivePushConfig オブジェクトと AlivcLivePusher オブジェクトを作成します。 externMainStream パラメーターを true に設定します。 audioFromExternal パラメーターを false に設定します。これは、音声収集が SDK で引き続き処理されることを示します。 startScreenCapture メソッドを呼び出して、拡張アプリから画面録画データを受信します。 その後、ストリームインジェストを開始および停止します。 iOS 用 Push SDK をホストアプリに統合するには、次の操作を実行します。

    1. AlivcLivePusher.framework、AlivcLibRtmp.framework、RtsSDK.framework、および AlivcLibReplayKitExt.framework の依存関係をホストアプリに追加します。3.png

    2. iOS 用 Push SDK を初期化し、ストリームインジェスト用の外部ビデオソースを設定します。

      externMainStream パラメーターを true に、externVideoFormat パラメーターを AlivcLivePushVideoFormatYUV420P に、audioFromExternal パラメーターを false に設定します。 その他のストリームインジェストパラメーターは、ビジネス要件に基づいて設定します。 サンプルコード:

       self.pushConfig.externMainStream = true;
       self.pushConfig.externVideoFormat = AlivcLivePushVideoFormatYUV420P;
       self.pushConfig.audioSampleRate = 44100;
       self.pushConfig.audioChannel = 2;
       self.pushConfig.audioFromExternal = false;
       self.pushConfig.videoEncoderMode = AlivcLivePushVideoEncoderModeSoft;
       self.pushConfig.qualityMode = AlivcLivePushQualityModeCustom;
       self.pushConfig.targetVideoBitrate = 2500;
       self.pushConfig.minVideoBitrate = 2000;
       self.pushConfig.initialVideoBitrate = 2000;
       self.livePusher = [[AlivcLivePusher alloc] initWithConfig:self.pushConfig];
    3. AlivcLivePusher クラスの次のメソッドを呼び出して、ライブストリーミング機能を使用します。

      • 画面録画データを受信します。

        コード内の kAPPGroup を、手順 1 で取得したアプリグループ識別子に置き換えます。 次のサンプルコードは例を示しています。

        [self.livePusher startScreenCapture:kAPPGROUP];
      • ストリームインジェストを開始します。

        [self.livePusher startPushWithURL:self.pushUrl]
      • ストリームインジェストを停止します。

        [self.livePusher stopPush];
        [self.livePusher destory];
        self.livePusher = nil;

同時配信設定の構成(インタラクティブ版)

iOS 用 Push SDK インタラクティブ版 V4.4.4 以降では、リアルタイムコミュニケーション(RTC)に基づく同時配信がサポートされています。iOS 用 Push SDK インタラクティブ版 V4.4.5 以降では、RTC ベースの同時配信と対戦がサポートされています。これらのバージョンの iOS 用 Push SDK を使用すると、配信者と視聴者の間で 300 ミリ秒以内の超低遅延の同時配信を実現し、同時配信に関連する機能を実装できます。詳細については、「同時配信の開発者ガイド」および「対戦の開発者ガイド」をご参照ください。

使用上の注意

  • パッケージサイズ: iOS向けPush SDKを統合した後、IPAパッケージのサイズは約 3 MB増加します。

  • 対応機種:

    iPhone 7以降、iOS 8.0以降のバージョン。