前回は、HLSについてご紹介いたしました。
今回は、ffmpegでHLS形式に書き出すについてご紹介します。
ffmpegのコマンド自体は調べるとでてくるので省略します。m3u8ファイルの中に書いてある内容について説明します。
基本的な部分は変わりませんが私たちが行おうとしているライブ配信をするにあたっていくつか、注意する点があります。
ライブ配信では、定期的に動画を作成する必要があるため、その都度m3u8ファイルが作成されることになります。
しかし、複数のm3u8ファイルを順番に再生してしまうと、動画が途切れて再生されてしまいます。
それを防ぐため、最初に書き出されたm3u8ファイルに、2回目以降に書き出されたファイルの内容を追加することで、スムーズに動画が再生されるように行いたいと思います。
とここまではよいのですが、TSファイルを再生させ、次のTSファイルを再生させると一瞬止まったような挙動が起こるようになりました。調査していくと#EXT-X-DISCONTINUITYを使用するのが良いというのがわかり、HLS形式の書き出しについては解決しました。
HLS絡みでクライアント側ではどういった処理が必要かを説明します。
初めに、Oculusで再生することが前提となっているのでUnityを使用します。
HLS形式の動画は、WWW(Unity既存クラス)で動画を落としてきてMovieTextureで再生すれば簡単じゃん!と思っていましたが
WWW.movieはOGGのみの対応しかおらず、そもそもHLS形式の動画にも対応していないことにも気づきました。
考え改め、まずm3u8ファイルとTSファイルをどうUnityで読み込み、再生できるかを調査しました。
ところがUnity関連で検索してもとにかくひっかかるのはAssets系ものばかり…
有償のものしかヒットしませんでした。
Unityだけで完結できるものだと思っていたのが違っていたみたいです。
Unityだけではなく、C#関連で調査していくとたくさん情報がでてきました。
その中でよさそうだなと思ったのが、OpenCVです。さらにUnityとOpenCVはすでに可能だということも知り、今度こそこれだ!と思いました。
OpenCVで調べていくとC#に対応したライブラリもありました。
ライブラリ自体はC#のものになっているので一度、VisualStudioにて環境を構築します。VisualStudio内にNugetというものが入っており、そこでライブラリ自体がダウンロードができます。ダウンロードができたらあとはビルドです。
※このあたりの方法については調べるとでてくるので省略します。
ビルドが成功するとdllファイルが出来上がります。
これでUnityでOpenCVが使えるようになるのでTSファイルが扱えるようになります。
m3u8ファイルのダウンロード自体もUnity標準のは使わず、C#で通信を行えば簡単に実装することができました。
今回のクライアント側の実装は、自分の知らないことばかりだったので
調査が主にでしたが、その分、すこしは知識がついたかな。と実感しています。
今後も日々精進していきますとしめて、今週はこのあたりで終わります。
最後までご覧いただき、ありがとうございます。
弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。
1 comment for “[Oculus]3D動画をストリーミング再生する方法 – 18 –”