開発入門 > Unity > Unityでビデオストリーミングをテクスチャとして表示する(アセットなしでOK)

Unityでビデオストリーミングをテクスチャとして表示する(アセットなしでOK)

テクスチャ上でビデオを再生するには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:ビデオを表示するオブジェクト。未指定の場合はスクリプトをアタッチしたオブジェクトに動画が表示されます。

ogg1

実行すると動画が表示されます。サーバーからダウンロード途中でも再生がスタートします。エラーが2つ出ますが無視してOKです。海外のフォーラムでも話題にでていましたがUnityのバグっぽい。

ogg2

 

ogg形式へビデオファイルのコンバート方法

上記スクリプトでの動画ストリーミング再生には、動画のファイル形式がogg形式である必要があります。各種ビデオファイルをogg形式へ変換するスクリプトを作成したので紹介しておく。スクリプトはVBScriptで記述したWidnows Scripting Hostです。(VBScriptを拡張子.vbsで保存すればそのままWindowsで実行できて便利)

  1. ffmpegのダウンロード
    ffmpeg公式サイトからWindows用バイナリをダウンロード
    zipファイルを解凍する
  2. 下記スクリプトを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
    
  3. Convert_video_to_ogg.vbs をダブルクリックして実行

説明文書が表示されるのでOKを押す

ogg3

ビデオファイルを選択する

ogg4

後は、変換されるのを待つ。oggファイルは元ビデオと同じフォルダに生成されます。

ogg5

ffmpegとogg変換スクリプトのセットをこちらに置いておきます( GPL 3.0ライセンスによる再配布)

zipiconffmpeg-20160610-git-0a9e781-win32-static_with_ogg_video_convert_script.zip

 

 

カテゴリー: Unity

HOME / Coporate Site/ Careers

© Copyright 2018 STYLY..