.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.25 2009

ライブストリーミング中に別のビューを重ねる

Tasakiです。

2009年も残すところ、あと1週間を切りました。
今年もいろいろありましたが、来年もどうぞよろしくお願いします。

ということで、前置きが年越しのあいさつ?となってしまいましたが、今回も前回のテーマの延長線上になります。(カテゴリが別ですが)

Appleが提供するサンプルコードの中にMoviePlayerなるものがあります。
この中で、ムービープレイヤー上にオーバレイビューを表示させてありまして、ローカルの動画ファイル再生の場合には、この方法で実現可能です。
以下にその部分を抜き出します。
NSArray* windows = [[ UIApplication sharedApplication] windows];
if([ windows count] > 1 ) {
// Locate the movie player window
UIWindow* moviePlayerWindow = [[ UIApplication sharedApplication] keyWindow];
// Add our overlay view to the movie player's subviews so it is
// displayed above it.
 [ moviePlayerWindow addSubview: self.overlayView ];
}

上のコードについて少し解説しますと、ムービー再生開始後に、ウィンドウが2つ以上存在すれば(つまり、再生が成功すれば)、キーウィンドウにオーバレイビューを追加する、という解釈ができます。
このことから、ムービープレイヤーは別のウィンドウとして生成されることが分かります。
よって、このムービープレイヤーウィンドウに対して、サブビューを追加すれば、オーバレイビューとして表示されることになるわけです。

ただ、HTTPスキーマのURLを渡した場合は、これだとうまくいきません。
理由は簡単で、MPMoviePlayerControllerのplayメソッドを呼んでも、すぐに再生が開始される訳ではないからです。
よって、play呼び出し直後には、まだウィンドウが追加されていません。

これを解決するためには、実際に再生が開始されたことが分かればいいのですが、そのような便利なイベントを取得するためのメソッドは用意されていません。
そこで、別のイベントを代わりに使用します。

それが、キーウィンドウ変更イベントです。
ムービーの再生が開始したということは、ムービープレイヤーウィンドウがキーウィンドウになったということです。
よって、キーウィンドウ変更の際に、上記コードを処理するように変更すればいいわけです。

まず、アプリ側でキーウィンドウ変更イベントの通知を受け取るように修正します。
ムービー再生開始前に以下のコードを追加します。
[[ NSNotificationCenter defaultCenter] addObserver: self selector: @selector( keyWindowChanged: ) name: UIWindowDidBecomeKeyNotification object: nil ];

この結果、キーウィンドウの変更があった場合に、- ( void ) keyWindowChanged:( NSNotification* ) notificationというメソッドが呼ばれようになります。(メソッド名は適宜入れ替えてください)

これで、ストリーミング再生の場合でもオーバレイビューを配置できるようになるはずです。
なお、今回の手法については、以下の点に考慮が必要です。

a. ムービープレイヤーウィンドウであることを直接、識別するためのAPIは現状では見当たらない(ムービープレイヤーウィンドウ自体は、UIWindowのサブクラスのインスタンスですが、そのクラスは公開されていません)

b. aの代替案として、再生開始前のウィンドウ数を保持しておき、playメソッド呼び出し後にウィンドウの総数が増えていれば、再生が開始したと考える

c. キーボード等の別ウィンドウとして定義されるビューを使用する場合、bが上手くいくか動作検証が必要



Appleさん…これ、どうにかなりませんか

関連記事
スポンサーサイト

Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/90-08c087a1

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。