このトピックでは、iOS クライアントに短編ドラマプロジェクトを統合する方法について説明します。
ソースコードの説明
ソースコードのダウンロード
このソリューションは、ApsaraVideo Player SDK の Professional Edition のみをサポートします。ソースコードをダウンロードするには、「ApsaraVideo Player SDK のライセンスを取得する」の説明に従って Professional Edition のライセンスを取得し、チケットを送信するか、Alibaba Cloud ビジネスサポートにお問い合わせいただく必要があります。
要件
カテゴリ | 要件 | ||||||
開発環境 | Xcode 14.0 以降。最新の公式バージョンを使用してください。 | ||||||
オペレーティングシステム | iOS 10 以降を実行する物理デバイス。 説明
| ||||||
CocoaPods | CocoaPods 1.9.3 以降。 | ||||||
前提条件
Player SDK ライセンスの Professional Edition の権限付与とライセンスキーを取得済みであること。アプリケーションをアタッチする手順については、「ライセンスのアタッチ」をご参照ください。
デモの実行
デモのソースコードを取得したら、
Exampleディレクトリに移動します。Example ディレクトリで
pod install --repo-updateコマンドを実行して、必要な SDK 依存関係を自動的にインストールします。AlivcPlayerDemo.xcworkspaceプロジェクトファイルを開きます。[Signing & Capabilities] タブで、Team と Bundle Identifier を変更します。Team は、追加した開発者の Apple ID です。
Bundle Identifier は、パッケージ ID です。

前の手順で取得したライセンス証明書を
Example/AlivcPlayerDemo/ディレクトリに配置し、ファイル名をlicense.crtに変更します。次に、Example/Info.plistファイルを開き、前の手順で取得した LicenseKey を AlivcLicenseKey フィールドの値として入力します。物理デバイスでデモをコンパイルして実行します。
コンポーネントの統合
このセクションでは、AUIShortVideoList コンポーネントとその外部インターフェイスを使用して、短編ビデオリスト再生機能を実装する方法について説明します。
準備
ApsaraVideo Player SDK のライセンスを統合します。
詳細については、「ライセンスの統合」をご参照ください。
AUIFoundation (AUI 基本コンポーネント)、AUIShortVideoList (短編ビデオリスト再生の基本コンポーネント)、および AUIPlayer.podspec (フレームワーク構成ファイル) モジュールをプロジェクトにコピーします。
Podfile を構成します。
プロジェクト内の依存ライブラリが保存されている場所に基づいて相対パスを変更します。Podfile を変更した後、Podfile と同じディレクトリで
pod install --repo-updateコマンドを実行して、サードパーティライブラリの依存関係を更新します。重要ApsaraVideo Player SDK の最新バージョンを使用してください。詳細については、「ApsaraVideo Player SDK for iOS のリリースノート」をご参照ください。
# Pod の例 install! 'cocoapods', :deterministic_uuids => false source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' target 'Your ProjectName' do # 使用する SDK のタイプ。 # TODO: この行の 'x.x.x' を特定のバージョン番号に置き換えてください。詳細とバージョン番号については、上記のドキュメントリンクをご参照ください。 pod 'AliPlayerSDK_iOS', '~> x.x.x' # モジュール内の依存関係 (AUIPlayer.podspec ファイルを変更してバージョンをカスタマイズできます。) pod "AUIPlayer/AliPlayerSDK_iOS", :path => "../" # 使用したい SDK を追加するか、AUIPlayer.podspec の AliPlayerSDK_iOS バージョンを変更することで、ビジネスニーズに基づいて使用する SDK を調整できます。 # pod "AUIPlayer/AliVCSDK_Standard", :path => "../" # AUI 基本コンポーネント (必須) pod "AUIFoundation/All", :path => "../AUIBaseKits/AUIFoundation" # 短編ドラマリスト再生コンポーネント pod "AUIPlayer/AUIPlayerKits", :path => "../" # サードパーティライブラリのバージョンをカスタマイズできます。 pod 'SDWebImage', '5.18.1' end post_install do |installer| installer.pods_project.build_configurations.each do |config| config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = 'NO' config.build_settings['CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER'] = 'NO' end end説明プロジェクトで使用されているサードパーティライブラリのバージョンが、現在のソースコードが依存しているバージョンと競合する場合は、プロジェクトのバージョンを使用してください。
プロジェクトを構成します。
プロジェクトが Swift プロジェクトであり、Objective-C のサードパーティライブラリを使用する必要がある場合は、プロジェクトの Build Settings でブリッジングヘッダーを構成する必要があります。これにより、Swift が AUIShortVideoList モジュール内の Objective-C インターフェイスに正しくアクセスして使用できるようになります。
ブリッジングヘッダーを設定します。
プロジェクトの Build Settings で、SWIFT_OBJC_BRIDGING_HEADER 設定を見つけ、その値をブリッジングヘッダーファイルのパスに設定します。次のコードはパスの例です。
<YourProjectName>/<YourProjectName>-Bridge-Header.hObjective-C インターフェイスをインポートします。
ブリッジングヘッダーファイルで、Swift に公開する必要がある Objective-C インターフェイスを必ずインポートしてください。次のコードは例です。
#import "AUIShortVideoList.h"その他の例とガイダンスについては、AUIShortVideoList モジュールの AUIPlayer-Bridge-Header.h ファイルをご参照ください。
コンパイルと実行。
構成が完了したら、プロジェクトをコンパイルして実行し、AUIShortVideoList コンポーネントが正しく統合されていることを確認します。
説明統合が完了したら、
git commitを実行して現在のコンポーネントの最新のコミット ID を記録します。これにより、将来のコンポーネント更新の基礎が提供され、更新前後のコードの差分が記録され、統合の品質管理に役立ちます。また、技術サポートを求める際にコンポーネントのバージョンを迅速に特定するのに役立ち、サポートプロセスの効率が向上します。統合の問題については、「統合に関する FAQ」をご参照ください。
AUIShortVideoList コンポーネントの統合準備が完了したら、次のコードをプロジェクトにコピーできます。
使用方法
AUIShortVideoListViewController の使用
次の 2 つのメソッドは、AUIShortVideoListViewController を初期化してプッシュし、機能を迅速に実行する方法を示しています。
ナビゲーションに UINavigationController を使用します。
Objective-C の例
// ビデオ情報配列を作成します。 NSArray<AUIShortVideoInfo *> *videoInfoList = [[NSArray alloc] init]; // AUIShortVideoListViewController を初期化し、ビデオデータを渡します。 AUIShortVideoListViewController *vc = [[AUIShortVideoListViewController alloc] initWithData:videoInfoList]; // UINavigationController を使用して新しいビューコントローラーをプッシュします。 [self.navigationController pushViewController:vc animated:YES];Swift の例
// ビデオ情報配列を作成します。 let info = Array<AUIShortVideoInfo>() // データソースを追加します。 // AUIShortVideoListViewController を初期化し、ビデオデータを渡します。 let vc = AUIShortVideoListViewController(data: info) // UINavigationController を使用して新しいビューコントローラーをプッシュします。 self.navigationController?.pushViewController(vc, animated: true)モーダル (Modal) トランジションを使用します。
Objective-C の例
// ビデオ情報配列を作成します。 NSArray<AUIShortVideoInfo *> *videoInfoList = [[NSArray alloc] init]; // AUIShortVideoListViewController を初期化し、ビデオデータを渡します。 AUIShortVideoListViewController *vc = [[AUIShortVideoListViewController alloc] initWithData:videoInfoList]; // モーダル表示スタイルを設定します (オプション)。 vc.modalPresentationStyle = UIModalPresentationFullScreen; // 新しいビューコントローラーをモーダルで表示します。 [self presentViewController:vc animated:YES completion:nil];Swift の例
// ビデオ情報配列を作成します。 let info = Array<AUIShortVideoInfo>() // データソースを追加します。 // AUIShortVideoListViewController を初期化し、ビデオデータを渡します。 let vc = AUIShortVideoListViewController(data: info) // モーダル表示スタイルを設定します。 vc.modalPresentationStyle = .fullScreen // オプション。必要に応じてスタイルを設定します。 // 新しいビューコントローラーをモーダルで表示します。 self.present(vc, animated: true, completion: nil)説明UINavigationController の代わりにページナビゲーションにモーダルトランジションを使用することを選択した場合、内部のページナビゲーションロジックを調整し、戻りパスをカスタマイズする必要がある場合があります。これにより、ターゲットページをモーダルで開くことができます。
また、AUIShortVideoDataProviderDelegate デリゲートを実装して、データコールバックを登録し、ビデオデータの読み込み方法をカスタマイズすることもできます。
UINavigationController の統合
Xcode がバージョン 11 にアップデートされた後、SceneDelegate が導入されました。iOS 13 より前は、AppDelegate がアプリケーションライフサイクルと UI ライフサイクルの両方を処理していました。iOS 13 以降、AppDelegate は UI ライフサイクルを処理しなくなり、アプリケーションライフサイクルと新しい Scene Session ライフサイクルのみを担当します。UI ライフサイクルは SceneDelegate によって処理されます。次のコードは例です。
AppDelegate.m (iOS 13 より前のバージョン向け)
#import "MyViewController.h" #import "AlivcPlayerDemoConfig.h" #import "AVTheme.h" - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // アプリケーション起動後のカスタマイズのためのオーバーライドポイント。 // ダークモードのみがサポートされています。 AVTheme.supportsAutoMode = NO; AVTheme.currentMode = AVThemeModeDark; // ルートビューコントローラーを作成します。カスタマイズ可能です。 MyViewController *mainViewController = [MyViewController new]; // カプセル化された AVNavigationController を使用します。 AVNavigationController *nav =[[AVNavigationController alloc]initWithRootViewController:mainViewController]; // システムの UINavigationController を使用します。 // UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:mainViewController]; [self.window setRootViewController:nav]; [self.window makeKeyAndVisible]; return YES; }SceneDelegate.m (iOS 13 以降)
#import "MyViewController.h" #import "AlivcPlayerDemoConfig.h" #import "AVTheme.h" - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { // このメソッドを使用して、UIWindow `window` を提供された UIWindowScene `scene` にオプションで構成およびアタッチします。 // ストーリーボードを使用している場合、`window` プロパティは自動的に初期化され、シーンにアタッチされます。 // このデリゲートは、接続中のシーンまたはセッションが新しいことを意味するものではありません (代わりに `application:configurationForConnectingSceneSession` を参照してください)。 // アプリケーション起動後のカスタマイズのためのオーバーライドポイント。 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; UIWindowScene *windowScene = (UIWindowScene *)scene; self.window = [[UIWindow alloc]initWithWindowScene:scene]; self.window.frame = windowScene.coordinateSpace.bounds; // ダークモードのみがサポートされています。 AVTheme.supportsAutoMode = NO; AVTheme.currentMode = AVThemeModeDark; // ルートビューコントローラーを作成します。 MyViewController *mainViewController = [MyViewController new]; AVNavigationController *nav =[[AVNavigationController alloc]initWithRootViewController:mainViewController]; // UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:mainViewController]; [self.window setRootViewController:nav]; [self.window makeKeyAndVisible]; }SceneDelegate.swift (iOS 13 以降)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { UIApplication.shared.statusBarStyle = UIStatusBarStyle.darkContent; let windowScene = scene as! UIWindowScene; self.window = UIWindow(windowScene: windowScene); self.window?.frame = windowScene.coordinateSpace.bounds; let myViewController = MyViewController(); let nav = AVNavigationController(rootViewController: myViewController ); // システムの UINavigationController を使用します。 // let nav = UINavigationController(rootViewController: myViewController ); self.window?.rootViewController = nav; self.window?.makeKeyAndVisible(); guard let _ = (scene as? UIWindowScene) else { return } }
データの取得
データ構造
AUIShortVideoList コンポーネントは、NSArray<AUIShortVideoInfo *> データ構造を使用します。AUIShortVideoInfo は、ビデオ情報を格納するデータクラスです。データ構造は次のとおりです。
フィールド | タイプ | 説明 | 注 |
videoId | int | ビデオの一意の ID。 | 各ビデオを一意に識別します。 |
url | String | ビデオソースの URL。 | MP4 や M3U8 などのカスタムビデオソースフォーマットを使用できます。 |
coverUrl | String | ビデオのサムネイル。 | |
author | String | ビデオの作成者。 | |
title | String | ビデオのタイトル。 | |
type | String | ビデオのタイプ。 | VideoType 列挙をご参照ください。タイプはビデオソースまたは広告にすることができます。 |
コンポーネントの初期化
AUIShortVideoList コンポーネントが正しく実行されるようにするには、AUIShortVideoListViewController を初期化するときに NSArray<AUIShortVideoInfo *> データソースを渡します。次のコードは例です。
Objective-C の例
// 現在のビューコントローラーで、ビデオ情報配列を作成し、コントローラーを初期化します。
NSArray<AUIShortVideoInfo *> *videoInfoList = [[NSArray alloc] init];
AUIShortVideoListViewController *vc = [[AUIShortVideoListViewController alloc] initWithData:videoInfoList];
// UINavigationController を使用して新しいビューコントローラーをプッシュします。
[self.navigationController pushViewController:vc animated:YES];Swift の例
// 現在のビューコントローラーで、ビデオ情報配列を作成し、コントローラーを初期化します。
let info = [AUIShortVideoInfo]() // データソースを追加します。
let vc = AUIShortVideoListViewController(data: info)
// UINavigationController を使用して新しいビューコントローラーをプッシュします。
self.navigationController?.pushViewController(vc, animated: true)データ読み込みのカスタマイズ
データ配列を直接渡すだけでなく、AUIShortVideoDataProviderDelegate プロトコルを実装してデータ読み込みをカスタマイズすることもできます。
デリゲートを介してコンポーネントを初期化します。初期化中にデータデリゲートを実装します。
Objective-C の例
// 現在のビューコントローラーで、コントローラーを初期化し、データプロバイダーを渡します。 AUIShortVideoListViewController *videoListVC = [[AUIShortVideoListViewController alloc] initWithDataProvider:self]; // UINavigationController を使用して新しいビューコントローラーをプッシュします。 [self.navigationController pushViewController:videoListVC animated:YES];Swift の例
// 現在のビューコントローラーで、コントローラーを初期化し、データプロバイダーを渡します。 let videoListVC = AUIShortVideoListViewController(dataProvider: self) // UINavigationController を使用して新しいビューコントローラーをプッシュします。 self.navigationController?.pushViewController(videoListVC, animated: true)AUIShortVideoDataProviderDelegate プロトコルを実装して、データの読み込みとリフレッシュをカスタマイズします。
@protocol AUIShortVideoDataProviderDelegate <NSObject> @required - (void)loadData:(id _Nullable)controller; // データを読み込みます。 @optional - (void)refreshData:(id _Nullable)controller;// データをリフレッシュします (オプション)。 @end
データリストの更新
ビデオデータを取得した後、次のインターフェイスを使用して ViewController のデータリストを更新します。
データの追加
/**
* @brief 現在のビデオリストに新しいビデオデータを追加します。
*
* @param videoInfoList 新しいビデオデータリスト。空にすることができます。
* 提供されたデータリストが空でない場合、データは既存のビデオリストの末尾に追加されます。
* 提供されたデータリストが空の場合、現在のリストは変更されません。
*/
- (void)appendVideoInfoList:(NSArray<AUIShortVideoInfo *> * _Nullable)videoInfoList;データのリセット
/**
* @brief 現在のビデオリストを指定された新しいビデオデータリストにリセットします。
*
* @param videoInfoList 新しいビデオデータリスト。空にすることができます。
* 現在のビデオリストを提供されたデータリストに置き換えます。
* 提供されたデータリストが空の場合、現在のビデオリストはクリアされます。
*/
- (void)resetVideoInfoList:(NSArray<AUIShortVideoInfo *> * _Nullable)videoInfoList;データ取得の例
ネットワークリクエストまたはデータ変換を通じて、NSArray<AUIShortVideoInfo *> データソースを取得できます。次のコードは例です。
ネットワークリクエスト
Objective-C の例
// 追加データをリクエストします。AUIShortVideoListConstants.defaultVideoInfoListURL はリクエスト URL です。独自のリクエスト URL に置き換えることができます。 - (void)loadData:(id)controller { __weak typeof(self) weakSelf = self; // self への弱い参照。 [AUIShortVideoListDataManager requestVideoInfoList:AUIShortVideoListConstants.defaultVideoInfoListURL completed:^(NSArray<AUIShortVideoInfo *> * _Nullable data, NSError * _Nullable error) { if (error) { __strong typeof(weakSelf) strongSelf = weakSelf; // self への強い参照。 [AVToastView show:[NSString stringWithFormat:@"Unable to retrieve short video list, error: %@", error.localizedDescription] view:strongSelf.view position:AVToastViewPositionMid]; return; } // 対応する子ビューコントローラーの appendVideoInfoList: メソッドを呼び出します。 if (controller && [controller respondsToSelector:@selector(appendVideoInfoList:)]) { [controller appendVideoInfoList:data]; } }]; }Swift の例
// 追加データをリクエストします。AUIShortVideoListConstants.defaultVideoInfoListURL はリクエスト URL です。独自のリクエスト URL に置き換えることができます。 func loadData(_ controller: Any?) { weak var weakSelf = self // self への弱い参照。 AUIShortVideoListDataManager.requestVideoInfoList(AUIShortVideoListConstants.defaultVideoInfoListURL) { (data: [AUIShortVideoInfo]?, error: Error?) in if let error = error { guard let strongSelf = weakSelf else { return } // self への強い参照。 AVToastView.show("Unable to retrieve short video list, error: \(error.localizedDescription)", view: strongSelf.view, position: .mid) return } if let myController = controller as? AUIShortVideoListViewController { // キャスト成功、myController を使用します。 if myController.responds(to: #selector(myController.appendVideoInfoList(_:))) { myController.appendVideoInfoList(data) } } } }データ変換
Objective-C の例
// 辞書配列をビデオ情報モデル配列に変換します。 NSArray<NSDictionary *> *responseArray = (NSArray<NSDictionary *> *)responseObject; NSMutableArray<AUIShortVideoInfo *> *videoInfoArray = [NSMutableArray arrayWithCapacity:responseArray.count]; for (NSDictionary *dict in responseArray) { // AUIShortVideoInfo モデルオブジェクトを初期化し、配列に追加します。 AUIShortVideoInfo *videoInfo = [[AUIShortVideoInfo alloc] initWithDict:dict]; [videoInfoArray addObject:videoInfo]; }Swift の例
let responseArray = responseObject as? [[AnyHashable : Any]] var videoInfoArray = [AnyHashable](repeating: 0, count: responseArray?.count ?? 0) as? [AUIShortVideoInfo] for dict in responseArray ?? [:] { guard let dict = dict as? [AnyHashable : Any] else { continue } // AUIShortVideoInfo モデルオブジェクトを初期化し、配列に追加します。 let videoInfo = AUIShortVideoInfo(dict: dict) videoInfoArray?.append(videoInfo) }
統合に関する FAQ
ブラックスクリーンなどの再生の問題
SDK ライセンスの構成を確認してください。詳細については、「ライセンスの統合」をご参照ください。
エラー: 「Sandbox: rsync.samba(56557) deny(1) file-read-data」
Build Settings で、User Script Sandboxing を NO に設定します。
コンパイルおよび実行時エラー
プロジェクトに同じサードパーティライブラリがすでに含まれている場合は、AUIPlayer.podspec ファイルでそのライブラリのバージョンを調整して、互換性を確保し、競合を回避してください。
サードパーティの依存関係が見つかりません
Podfile を変更した後にサードパーティの依存関係が見つからない場合は、Podfile があるディレクトリで pod install --repo-update を実行してください。
依存関係の統合が遅い
依存関係の統合が遅い場合は、Podfile で Alibaba Cloud Pod リポジトリを構成して問題を解決できます。次のコードは例です。
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/aliyun/aliyun-specs.git'プレーヤーバージョンの切り替え
AUIPlayer.podspec のプレーヤー依存関係を使用したくない場合は、「ApsaraVideo Player SDK for iOS のクイックスタート」をご参照ください。
シナリオの構築
AUIShortVideoList コンポーネントは、さまざまなシナリオ向けのローコード統合をサポートしています。このコンポーネントを使用して、短編ビデオリストのシナリオベースの機能を構築できます。例は、AUIShortDramaList (短編ドラマシアターシナリオモジュール) や AUIShortDramaFeeds (短編ドラマ Feeds ストリームシナリオモジュール) などの AUIPlayerScenes サンプルにあります。
短編ドラマシアターシナリオ
概要
AUIShortDramaList は、AUIShortVideoList コンポーネントに基づいて実装された、短編ドラマシアター向けのシナリオベースのモジュールです。このモジュールは、シアター詳細ページと推奨ページを提供します。また、ネストされたプライマリページとセカンダリページ、および共有プレーヤーインスタンスもサポートしています。
シナリオの統合
短編ドラマシアターシナリオを構築する前に、AUIShortVideoList コンポーネントを統合するための準備が完了していることを確認してください。
AUIShortDramaList モジュールをプロジェクトにコピーします。
Podfile を構成します。
プロジェクトの Podfile に AUIShortDramaList モジュールとその依存関係への参照を追加します。次のコードは構成例です。
# Pod の例 install! 'cocoapods', :deterministic_uuids => false source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' target 'Your ProjectName' do # 短編ドラマシナリオ (シアターと Feeds ストリームを含む)。2 つのモジュールは個別に統合できます。 pod "AUIPlayer/AUIPlayerScenes", :path => "../" # 短編ドラマシアターシナリオ # pod "AUIPlayer/AUIPlayerScenes/AUIShortDramaList", :path => "../" end post_install do |installer| installer.pods_project.build_configurations.each do |config| config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = 'NO' config.build_settings['CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER'] = 'NO' end endプロジェクト内の依存ライブラリの保存場所に基づいてパスを変更します。
説明プロジェクトで使用されているサードパーティライブラリのバージョンが、AUIShortDramaList ソースコードが依存しているバージョンと競合する場合は、プロジェクトのバージョンを使用してください。
プロジェクトを構成します。
プロジェクトが Swift プロジェクトであり、Objective-C のサードパーティライブラリを使用する必要がある場合は、プロジェクトの Build Settings でブリッジングヘッダーを構成する必要があります。これにより、Swift が AUIShortDramaList モジュール内の Objective-C インターフェイスに正しくアクセスして使用できるようになります。
ブリッジングヘッダーを設定します。
プロジェクトの Build Settings で、SWIFT_OBJC_BRIDGING_HEADER 設定を見つけ、その値をブリッジングヘッダーファイルのパスに設定します。次のコードはパスの例です。
<YourProjectName>/<YourProjectName>-Bridge-Header.hObjective-C インターフェイスをインポートします。
ブリッジングヘッダーファイルで、Swift に公開する必要がある Objective-C インターフェイスを必ずインポートしてください。次のコードは例です。
#import "AUIShortDramaList.h"その他の例とガイダンスについては、AUIShortVideoList モジュールの AUIPlayer-Bridge-Header.h ファイルをご参照ください。
コンパイルと実行。
構成が完了したら、プロジェクトをコンパイルして実行し、AUIShortDramaList コンポーネントが正しく統合されていることを確認します。
使用方法
外部ナビゲーション用に短編ドラマシアター ViewController ページを公開できます。具体的な呼び出しロジックについては、次の例をご参照ください。
Objective-C の例
- (void)openShortDramaList {
AUIShortDramaListViewController *vc = [[AUIShortDramaListViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}Swift の例
func openShortDramaList() {
let vc = AUIShortDramaListViewController()
navigationController?.pushViewController(vc, animated: true)
}データの取得
AUIShortDramaList モジュールは NSMutableArray<AUIShortDramaInfo *> データ構造を使用します。AUIShortDramaInfo は、短編ドラマのエピソードデータを格納するデータクラスです。データ構造は次のとおりです。
フィールド | タイプ | 説明 | 注 |
dramaId | NSInteger | ドラマの一意の ID。 | |
title | NSString * | ドラマのタイトル。 | |
cover | NSString * | ドラマのサムネイル。 | |
firstDrama | AUIShortVideoInfo * | ドラマの最初のエピソード。 | firstDrama はドラマの最初のエピソードです。 |
dramas | NSMutableArray<AUIShortVideoInfo *> * | エピソードのリスト。 | AUIShortVideoList モジュールのデータソースとして使用できます。 |
ネットワークリクエストまたはデータ変換を通じて、最終的な NSMutableArray<AUIShortDramaInfo *> データソースを取得できます。
AUIShortDramaListViewController のコードは、データを取得する方法の例を提供します。このクラスは AUIShortVideoDataProviderDelegate データリクエストデリゲートインターフェイスを実装し、次の 2 つの主要なメソッドを提供します。
@protocol AUIShortVideoDataProviderDelegate <NSObject> @required - (void)loadData:(id _Nullable)controller; // データを読み込みます。 @optional - (void)refreshData:(id _Nullable)controller; // データをリフレッシュします (オプション)。 @endAUIShortDramaListDataManager で提供される requestDramaInfoList メソッドを使用してネットワークリクエストを行い、最終的な
NSMutableArray<AUIShortDramaInfo *>データソースを取得します。取得したデータは、後続のビュー表示と処理のために内部の dramaInfoList オブジェクトに保存されます。
短編ドラマ Feeds ストリームシナリオ
概要
AUIShortDramaFeeds は、AUIShortVideoList コンポーネントに基づいて実装された、短編ドラマ Feeds ストリーム向けのシナリオベースのモジュールです。このモジュールは、Feeds ストリームタブページを提供し、ネストされたタブページをサポートし、上下左右のスワイプによる再生を可能にします。また、プレーヤーインスタンスも共有します。
シナリオの統合
短編ドラマ Feeds ストリームシナリオを構築する前に、AUIFoundation および AUIShortVideoList コンポーネントを統合するための準備が完了していることを確認してください。
AUIShortDramaFeeds モジュールをプロジェクトにコピーします。
Podfile を構成します。
プロジェクトの Podfile に AUIShortDramaFeeds モジュールとその依存関係への参照を追加します。次のコードは構成例です。
# Pod の例 install! 'cocoapods', :deterministic_uuids => false source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' target 'Your ProjectName' do # 短編ドラマシナリオ (シアターと Feeds ストリームを含む)。2 つのモジュールは個別に統合できます。 pod "AUIPlayer/AUIPlayerScenes", :path => "../" # 短編ドラマ Feeds ストリームシナリオ # pod "AUIPlayer/AUIPlayerScenes/AUIShortDramaFeeds", :path => "../" end post_install do |installer| installer.pods_project.build_configurations.each do |config| config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = 'NO' config.build_settings['CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER'] = 'NO' end endプロジェクト内の依存ライブラリの保存場所に基づいてパスを変更します。
説明プロジェクトで使用されているサードパーティライブラリのバージョンが、AUIShortDramaFeeds ソースコードが依存しているバージョンと競合する場合は、プロジェクトのバージョンを使用してください。
プロジェクトを構成します。
プロジェクトが Swift プロジェクトであり、Objective-C のサードパーティライブラリを使用する必要がある場合は、プロジェクトの Build Settings でブリッジングヘッダーを構成する必要があります。これにより、Swift が AUIShortDramaFeeds モジュール内の Objective-C インターフェイスに正しくアクセスして使用できるようになります。
ブリッジングヘッダーを設定します。
プロジェクトの Build Settings で、SWIFT_OBJC_BRIDGING_HEADER 設定を見つけ、その値をブリッジングヘッダーファイルのパスに設定します。次のコードはパスの例です。
<YourProjectName>/<YourProjectName>-Bridge-Header.hObjective-C インターフェイスをインポートします。
ブリッジングヘッダーファイルで、Swift に公開する必要がある Objective-C インターフェイスを必ずインポートしてください。次のコードは例です。
#import "AUIShortDramaFeeds.h"その他の例とガイダンスについては、AUIShortVideoList モジュールの AUIPlayer-Bridge-Header.h ファイルをご参照ください。
コンパイルと実行。
構成が完了したら、プロジェクトをコンパイルして実行し、AUIShortDramaFeeds コンポーネントが正しく統合されていることを確認します。
使用方法
外部ナビゲーション用に短編ドラマ Feeds ストリーム ViewController ページを公開できます。具体的な呼び出しロジックについては、次の例をご参照ください。
Objective-C の例
- (void)openShortDramaFeeds {
AUIShortDramaFeedsViewController *vc = [[AUIShortDramaFeedsViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}Swift の例
func openShortDramaFeeds() {
let vc = AUIShortDramaFeedsViewController()
navigationController?.pushViewController(vc, animated: true)
}データの取得
AUIShortDramaFeeds モジュールは NSArray<AUIShortVideoInfo *> データ構造を使用します。AUIShortVideoInfo はビデオ情報を格納するデータクラスです。この配列には複数の AUIShortVideoInfo インスタンスが含まれており、それぞれがビデオの情報を表します。詳細については、AUIShortVideoList コンポーネントの完全なドキュメントをご参照ください。
コア機能
このコンポーネントは ApsaraVideo Player SDK を使用し、複数のプレーヤーインスタンス (AliPlayer)、プリロード (MediaLoader)、およびプリレンダリングを介して実装されています。プリロード、プリレンダリング、HTTPDNS、暗号化再生などのコア機能を使用して、再生レイテンシ、安定性、セキュリティの観点から視聴体験を大幅に向上させます。詳細については、「高度な機能」をご参照ください。
プリロード
スライドウィンドウポリシーを使用して、ビデオプリロードタスクを動的に開始および停止します。基盤となる SDK は、ネットワークステータスに基づいてタスクの優先度をインテリジェントに調整します。これにより、再生中のビデオと次のビデオがより多くのネットワークリソースを受け取ることが保証され、インスタント再生率が大幅に向上し、カクつきが減少します。ビデオをすばやくスワイプしても、スムーズな再生体験を楽しむことができます。詳細については、「プリロード」をご参照ください。
プリレンダリング
プリレンダリングは、後続のビデオの最初のフレームをバックグラウンドで事前にレンダリングするために使用されます。これにより、ブラックスクリーンの発生が減り、再生がよりスムーズになります。ApsaraVideo Player SDK は、バージョン 6.16.0 以降、強制プリレンダリングをサポートしています。詳細については、「プリレンダリング」をご参照ください。
マルチインスタンスプレーヤープール
グローバルに共有されるプレーヤーインスタンスプールが実装されており、インスタンスの数を柔軟に構成できます。API 呼び出しとスレッドリソース管理を最適化することで、スレッド管理、CPU 使用率、メモリ使用量の観点から最適なパフォーマンスとリソース効率を実現します。これにより、パフォーマンスとエクスペリエンスの最適なバランスが取れます。パフォーマンスの最適化により、スワイプ中の時間のかかる操作が減り、カクつきが最小限に抑えられ、再生体験がよりスムーズになります。
PiP モードでのエピソード自動切り替え
グローバルな PiPVC および DisplayLayer テクノロジーにより、ピクチャーインピクチャー (PiP) モードでエピソードを変更する際に、継続的なレンダリングと中断のないインスタンス切り替えが保証されます。これにより、シームレスで、知覚できず、中断のない体験が提供されます。この実装は、「PiP 再生」のベストプラクティスのエンジニアリングアプリケーションです。
HTTPDNS
HTTPDNS は、より高速で安定した DNS 解決サービスを提供します。従来の DNS 解決を置き換えることで、DNS 解決時間を短縮し、ビデオ再生の読み込み速度と安定性を向上させます。これにより、ユーザーの視聴体験が向上します。バージョン 6.12.0 以降、ApsaraVideo Player SDK では HTTPDNS を手動で有効にする必要はありません。詳細については、「HTTPDNS」をご参照ください。
ビデオ暗号化
短編ドラマシナリオのビデオは、通常 1〜3 分の長さの MP4 ファイルです。バージョン 6.8.0 以降、ApsaraVideo Player SDK は MP4 再生のプライベート暗号化をサポートしています。これにより、短編ドラマシナリオのビデオにセキュリティが提供されます。詳細については、「Alibaba Cloud ビデオ暗号化 (プライベート暗号化)」をご参照ください。
プライベート暗号化を使用する MP4 ビデオを再生するには、次の条件を満たす必要があります。
プライベート暗号化された MP4 ビデオをプレーヤーに渡して再生する場合、アプリケーションはビデオ URL に
etavirp_nuyila=1を追加する必要があります。たとえば、元のビデオ URL がhttps://example.aliyundoc.com/test.mp4の場合、プレーヤーに渡される URL はhttps://example.aliyundoc.com/test.mp4?etavirp_nuyila=1である必要があります。アプリのライセンスに関連付けられている UID は、プライベート暗号化された MP4 ファイルを生成した UID と同じである必要があります。
次の例は、プライベート暗号化されたビデオ URL を検証する方法を示しています。
メタ情報には
AliyunPrivateKeyUriタグが含まれている必要があります。ビデオは ffplay を使用して直接再生することはできません。
H.265 の適応再生
H.265 ストリームのハードウェアデコードに失敗し、H.264 バックアップストリームが設定されている場合、プレーヤーは自動的に H.264 バックアップストリームに切り替わります。H.264 バックアップストリームが設定されていない場合、プレーヤーは自動的に H.265 ストリームのソフトウェアデコードに切り替わります。詳細については、「H.265 の適応再生」をご参照ください。
アダプティブビットレートストリーミング
ApsaraVideo Player SDK は、HLS および DASH ビデオストリームのアダプティブビットレートストリーミングをサポートしています。プレーヤーの selectTrack メソッドを呼び出して、ストリームのビットレートを切り替えることができます。これにより、ビデオの解像度をネットワーク状況に適応させることができます。詳細については、「アダプティブビットレート切り替え」をご参照ください。