BOX音楽好きの組み込みソフトエンジニアによるプログラミング(主にiOSアプリ開発)の勉強の記録2018-06-04AVPlayerItemVideoOutputを使ってムービーファイルから取得したPixelBufferからムービーの再生させてみたiOSでの動画の再生方法には以下の3つがありますよね。UIWebViewを使うAVPlayerViewControllerを使うAVPlayerを使う番号が大きくなるほど自由度は高くなりますが、難易度は増していきます。今回は上記の方法の何れでもない方法で再生します。AVPlayerを普通に使用するよりも、もう少し込み入った方法でムービーファイルを再生したくなったのです。具体的には「再生する際に使用されるPixelBufferを実装者の意思で一回取り出して、そのPixelBufferを使って動画を再生する」というものです。その際に少しAVPlayerの助けはお借りしますが。以下のレポジトリのソースを参考にしまくってますので合わせてご覧ください。swift4で動かさねばならなかったので...)github.comどうやって動画ファイルからPixelBufferを取り出すか今回ある理由(後日更新予定)で、どうしても動画ファイルからPixelBufferを取り出したかったんですが、そうするにはどうすればいいんだ?というのがはじめのハードルでした。使用すれば取り出せそうだなーということが分かりました。##今回の動画再生の流れ今回の動作再生の流れの理解は以下のような感じです(多分...)。UIView)をまず作成。これをSampleBufferDisplayLayerViewとする。(準備)SampleBufferDisplayLayerViewのプロパティにplayer(AVPlayer型)を追加する。(準備)SampleBufferDisplayLayerViewのプロパティにplayerItemVideoOutput(AVPlayerItemVideoOutput型)を追加する。(準備)SampleBufferDisplayLayerViewのlayerをvideoLayer(AVSampleBufferDisplayLayer型)に置き換える。ViewControllerで動画を含めたライブラリを呼び出してムービーを選択。→ファイルのURLを取得。5で取得したURLからAssetを取得。そのAssetからitem(AVPlayerItem型)を取得。SampleBufferDisplayLayerView(1参照)のplayerプロパティ(2参照)に5で取得したitemを追加(というか置き換えって言った方が正しい??)。SampleBufferDisplayLayerViewがitemが追加されたことを(予めaddしているObserverによって)検知したら、追加されたitemを取得しplayerItemVideoOutput(3参照)に追加。playerItemVideoOutputのPixelBufferの変化を検知するためにCADisplayLinkとかrequestNotificationOfMediaDataChangeとかsetDelegateとかをごにょごにょ設定を前もってしておく。そのためにはAVPlayerItemOutputPullDelegateをSampleBufferDisplayLayerViewに追加しとく必要がある。9で設定したもの達が判断した適切なタイミングでvideoLayerにPixelBufferを格納する。→Viewで表示されている内容が更新される。SampleBufferDisplayLayerViewクラスのコード今回の動画再生の心臓部、SampleBufferDisplayLayerViewのコードは以下です。setCADiplayLinkSettingに呼び出されるselector。}}Github今回作成したプロジェクトは以下にあげてます。ViewControllerについても、ファイルの再生が終わったことを認識する部分などにクセがあるので気をつけて見てみてください(今回は説明を割愛致します)。[swift2.1]UIImageの一部を切り取る方法について。はてなブログPro音楽好きの元組み込みソフトエンジニアによるプログラミング勉強日記(主にiOS)。他の興味のあることも書いていきます。グーグルアドセンス」を利用しています。広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。Google](https://www.google.com/intl/ja_JP/policies/technologies/ads/)」をご覧ください。はてなブログをはじめよう!anthrgrnwrldさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。