最近在做Unity和Oculus Rift的开发,需要用到一个把摄像头的视频通过网络传给Oculus的组件。
新的Unity自带了一个videoplayer,但是功能比较有限,能够比较好的播放本地的视频,在线的支持.webm和.vp8。我尝试了用ffmpeg + ffserver (已经不再支持了)还有icecast 2去搭建相应的视频流传输平台都没有成功。
其他的解决方案包括GST Movie Texture(已经不再收到维护,试过用不了),ua-i2cat/gst-unity-bridge(和前面这个是同一个人做的)。现在尝试的成功的方案是用Gstreamer配合mrayGStreamerUnity 实现需求。
mrayGStreamerUnity
这个项目的作者的github上直接提供了编译好的文件,编译我没有做(试过编译,但是发现我的Gstreamer的插件路径好像没有设置对,就放弃了)。3D环境中视频流的播放界面可以是一个Quad(Mesh Filter)。需要把BlitMtrl这个Material拖到Mesh Renderer的Element 0中。此外需要额外加上Gst Custom Texture和Custom Pipeline Player两个Script。Custom Pipeline Player的Target Material需要设置成BlitMtrl。Pipeline需要填入Gstreamer的命令行参数,比如
udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG,payload=26