テクスチャ上でビデオを再生するにはAVProアセットやEasy Movie Texture (Video Texture)などを使う方法がありますがUnityのMovieテクスチャを使えば追加アセット無しでも実現することが可能です。
ウェブサーバーからストリーミングされる動画をテクスチャに貼るにはどうしたらいいものかと調べていたらUnity標準のMovieテクスチャでも実現できることがわかった。ただし、動画ファイル形式はogg形式でないとダメなようだ。
ウェブサーバー上のoggビデオファイルをストリーミング再生する
下記コードをOggVideoStreamingTexture.csとして保存する。
using UnityEngine; using System.Collections; using System; public class OggVideoStreamingTexture : MonoBehaviour { public string OggVideoURL; public GameObject GameobjectForVideoTexture; void Start () { StreamPlayVideoAsTexture(); } public void StreamPlayVideoAsTexture() { if (this.OggVideoURL!="") { StartCoroutine(StartStream(this.OggVideoURL)); } } protected IEnumerator StartStream(String url) { MovieTexture movieTexture; //エラー2つ出るが無視してOK //https://issuetracker.unity3d.com/issues/movietexture-fmod-error-when-trying-to-play-video-using-www-class Debug.Log("Ignore following two errors"); WWW videoStreamer = new WWW(url); movieTexture = videoStreamer.movie; while (!movieTexture.isReadyToPlay) { yield return 0; } GameobjectForVideoTexture.GetComponent<Renderer>().material.mainTexture = movieTexture; AudioSource audioSource = GameobjectForVideoTexture.AddComponent<AudioSource>(); audioSource.clip = movieTexture.audioClip; movieTexture.Play(); audioSource.Play(); } }
任意のGameobjectに貼り付けます。
OggVideoURL:ストリーム再生するoggビデオのURL
サンプルで http://www.unity3d.com/webplayers/Movie/sample.ogg を利用して試そう
GameobjectForVideoTexture:ビデオを表示するオブジェクト。未指定の場合はスクリプトをアタッチしたオブジェクトに動画が表示されます。
実行すると動画が表示されます。サーバーからダウンロード途中でも再生がスタートします。エラーが2つ出ますが無視してOKです。海外のフォーラムでも話題にでていましたがUnityのバグっぽい。
ogg形式へビデオファイルのコンバート方法
上記スクリプトでの動画ストリーミング再生には、動画のファイル形式がogg形式である必要があります。各種ビデオファイルをogg形式へ変換するスクリプトを作成したので紹介しておく。スクリプトはVBScriptで記述したWidnows Scripting Hostです。(VBScriptを拡張子.vbsで保存すればそのままWindowsで実行できて便利)
- ffmpegのダウンロード
ffmpeg公式サイトからWindows用バイナリをダウンロード
zipファイルを解凍する - 下記スクリプトをConvert_video_to_ogg.vbsとして保存。1で解凍したffmpegフォルダに設置する
'============================================== 'Video file to ogg video convert script with ffmpeg ' 2016-06-13 @from2001vr '============================================== OggQuality_video = 5 '0 to 10 OggQuality_audio = 5 '0 to 10 ffmpegPath = "bin\ffmpeg.exe" MsgBox "Ogg video file will be created at the same folder.",0,"Choose video file to convert" 'ファイル選択 InputVideoFilePath = FileDialog() '変換処理コマンド生成 commandString = ffmpegPath + " -i " + InputVideoFilePath + " -codec:v libtheora -qscale:v " + cstr(OggQuality_video) + " -codec:a libvorbis -qscale:a " + cstr(OggQuality_audio) + " " + Left(InputVideoFilePath, Len(InputVideoFilePath) - 4) + ".ogg" '処理実行 dim objWShell Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run commandString, 1, true Set objShell = Nothing '保存フォルダを開く Set objShell = WScript.CreateObject("Shell.Application") objShell.Explore Left(InputVideoFilePath, InStrRev(InputVideoFilePath, "\")) 'ファイル選択ダイアログ function FileDialog() Set wShell=CreateObject("WScript.Shell") Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""") FileDialog = oExec.StdOut.ReadLine End Function
- Convert_video_to_ogg.vbs をダブルクリックして実行
説明文書が表示されるのでOKを押す
ビデオファイルを選択する
後は、変換されるのを待つ。oggファイルは元ビデオと同じフォルダに生成されます。
ffmpegとogg変換スクリプトのセットをこちらに置いておきます( GPL 3.0ライセンスによる再配布)
ffmpeg-20160610-git-0a9e781-win32-static_with_ogg_video_convert_script.zip