iOS 向け Video Cloud アプリケーションを開発するためのベスト プラクティス

Product
Video Cloud
対象となる役割
開発者
バージョン
Brightcove 5
エディション
すべて

Video Cloud App SDK for iOS および Cocoa Touch での作業において陥りやすい過ちを、以下に記載しています。ここでの概説は、アプリケーションを正しくプログラミングするために役立ちます。Video Cloud App SDK for iOS に関する以下のドキュメントについてもご確認ください。

メモリ管理

iPhone 向けのプログラミングにおいて、メモリ管理に関する問題がよくみられます。クラッシュなしで使いやすいアプリケーションを作成することは非常に重要です。 ここではメモリ管理の黄金律について確認します。newalloc、または copy を含むメソッドでオブジェクトを作成する場合、後にそのオブジェクトをリリースあるいはオートリリースする必要があります。さらに、retain メソッドの呼び出しによってオブジェクトのオーナーシップを得ることが必要になる場合があります。Video Cloud Media API 呼び出しを行うとき、BCVideo などの返されたオブジェクトはいったん保持し、不要になった時点でリリースしなければなりません。メモリ問題のデバッグは苦痛を伴う場合があります。 しかしアプリケーションを慎重に開発し、コードを徐々に実行し、行き詰まった場合にはオンラインで検索することにより、エラーを正確に把握できるはずです。Xcode 3.2 をインストールしている場合、メモリ管理の潜在的な問題を見つけるには、Build メニューの Build and Analyze オプションが役立ちます。Apple のデベロッパ用ドキュメントにコード分析に関する詳細が記載されています。

ユニット テスト

ユニット テストは、アプリケーションをより安定させ、意図した通りにコードが機能しているかを確認するための優れた方法です。Apple iOS SDK には、ユニット テスト フレームワークで必要な基本機能すべてを提供する、OCUnit フレームワークが付属しています。サードパーティによる Objective-C 用のユニット テスト フレームワークは数多く存在しますが、プロジェクトへの組み込みには、アプリケーションの一部をモックしてテストを簡素化する OCMock を推奨します。

ベスト プラクティス:よくあるエラーのシナリオへの対処

API トークンを入力する必要があります。そうしなかった場合は、呼び出しを試みた際に BCMediaAPINSInternalInconsistencyException 処理を実行します。

BCMediaAPI *api = [[BCMediaAPI alloc] initWithReadToken: APIToken];

Video Cloud API への呼び出しを行った際、結果が NIL かどうかをチェックします。NIL の場合、パラメータとして渡したエラー ポインタをチェックします。

BCMediaAPI *api = [[BCMediaAPI alloc] initWithReadToken: APIToken];

NSError *e;

BCVideo *video = [api findVideoById: 12345 error: &e];
if (video) {
    [video retain]; //保持されるよう動画が定義される
} else {
    NSString *errStr = [api getErrorsAsString:e];
        NSLog(errStr);
}

findVideoById を無効な動画 ID で呼び出しているなど、探しているオブジェクトが見つからない場合、結果は NIL となって、エラーに「NULL」のメッセージが含まれます。以下の例では、動画 ID 121212 は存在しません。

BCMediaAPI *api = [[BCMediaAPI alloc] initWithReadToken: APIToken];

NSError *e;

BCVideo *video = [api findVideoById: 121212 error: &e];
if (video) {
    [video retain];
} else {
    NSString *errStr = [api getErrorsAsString:e];
        NSLog(errStr); // 受け取ったエラー: コンソールに NULL がログされた
}

利用できないネットワークへの対処

アプリケーションはユーザー側で使用されているため、ネットワークの信頼性はいつでも変わる可能性があります。ユーザーのデバイスが Video Cloud サービスにアクセスできない場合、エラー ポインタには NSCocoaErrorDomain エラーが記述されます。

BCMediaAPI *api = [[BCMediaAPI alloc] initWithReadToken: APIToken];

NSError *e;

BCVideo *video = [api findVideoById: 456123 error: &e];
if (video) {
    [video retain];
} else {
    NSString *errStr = [api getErrorsAsString:e];
    NSLog(errStr); // 受け取ったエラー: オペレーションが完了できなかった。(Cocoa エラー 256) コンソールにログ
}

無効な動画の再生

非アクティブ化された動画、無効な動画、スケジュールの関係でアクティブでない動画、あるいは不許可の状態の動画(メディア共有で共有された動画で起きる場合がある)を再生しようとすると、プレーヤ UI に真っ黒の画面がロードされます。これらの状態にある動画は再生しないでください。

ストリーミング動画の再生

ストリーミング動画を再生しようとすると、Apple MPMoviePlayerController クラスが例外を投げます。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:'Invalid content URL provided to MPMoviePlayerController (media url)'.

RTMP および RTMPe プロトコルは MPMoviePlayerController クラスでサポートされていません。ストリーミング コンテンツを HTTP 経由で再生するため、ユニバーサル デリバリ サービスを使用するように Video Cloud アカウントを設定することをお勧めします。以下の例に、BCMediaAPI オブジェクトでユニバーサル デリバリ サービスをオンにする方法を示しています。

BCMediaAPI *api = [[BCMediaAPI alloc] initWithReadToken: APIToken];
[api setUdsSupportOn:YES];

プロパティが設定されると、すべての Media API 呼び出しが media_delivery=HTTP 引数が付加されて行われます。

その他のヒントとテクニック

地域制限なし

BCMediaAPI オブジェクトがメディアの地域制限メタデータを返した場合でも、MPMoviePlayerController では地域制限はサポートされていません。これについては将来のサポートが検討されています。

リージョン サポート

初期設定では、Video Cloud Media API への呼び出しはすべて、api.brightcove.co.jp に送信されますが、api.brightcove.co.jp に送信するよう設定することが可能です。これには、BCConfigManager クラスで setRegion() メソッドを使用します。このメソッドは、BCRegionUSBCRegionJP のどちらかのリージョン列挙値を取ります。

形式とエンコード

高解像度での動画再生はプレーヤにアーチファクトを起こす可能性があります。モバイル機器での再生には、低解像度でのエンコーディングをお勧めします。デフォルトのトランスコード設定を使用している場合は、問題はありません。そうでない場合、帯域幅合計が約 256 kbps であり、H.264 ベースライン プロファイルでエンコードされたレンディションが動画に必要です。

.flv などのサポートされていない形式を HTTP から再生しようとすると、エラー警告が表示されます。既知の問題として、警告が消えてからステータス バーが表示されることが報告されています。

iPhone SDK Twitter の問題(非推奨ライブラリ libBCiPhoneKit.a のみ)

Video Cloud App SDK for iOS の 1.x リリースでは、Twitter での動画共有に Twitter の Basic 認証を使用します。Twitter は将来、API における Basic 認証を終了する予定です。したがって、別の認証 API を使用する Video Cloud App SDK for iOS が新たにリリースされるまで、iOS 用 Video Cloud アプリから Twitter への共有が利用できなくなります。iOS 用 Video Cloud アプリでの共有エラーを回避するには、以下を行う必要があります。

  1. リリース済みの iPhone アプリケーションを更新します。この新しいバージョンには、Video Cloud プレーヤの共有メニューをオフにする以下の行が含まれます。

    bcPlayer.shareMenuEnabled = NO; // 共有メニュー項目をオフにします

    この 1 行を BCPlayer インスタンスのどこかに含める必要があります。
  2. 新しいバージョンのアプリケーションをコンパイルし、iTunes App Store のアプリケーションの更新としてリリースします。

これらのヒントが Video Cloud App SDK for iOS を使用した iPhone アプリケーション開発に役立つことを願っています。サポートが必要な場合あるいは質問がある場合は、フォーラムにアクセスしてください。また、Video Cloud App SDK for iOS については Twitter(http://twitter.com/bciphonesdk)でもフォローできます。

タグ
iOS, iPad, iPhone