无法让Unity的GearVR MediaSurfacePlugin播放视频

时间:2016-09-09 12:11:01

标签: android unity3d unity5 oculus gear-vr

我在尝试通过Oculus mobile sdk MediaSurfacePlugin for Unity播放视频时遇到了一些问题。我已经尝试了很多不同的想法,但不断回到同样的问题;似乎Android媒体播放器无法找到该文件。这些是我最常犯的错误:

  

Unity:无法使用消息启动mediaPlayer   java.io.IOException:setDataSource失败。

     

Unity:

     

Unity :(文件名:./ artifacts /generated / common / runtime / UnityEngineDebugBindings.gen.cpp   行:37)

     

Unity:

  

MediaPlayer:无法创建媒体播放器

     

Unity:无法使用消息启动mediaPlayer   java.io.IOException:setDataSourceFD failed:status = 0x80000000

     

Unity:

     

Unity :(文件名:   ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp   行:37)

     

Unity:

以及;媒体播放器准备失败。状态为0x1 =

据我所知,他们都意味着媒体播放器无法访问该文件或无法找到该文件,或者由于格式不兼容而无法播放该文件(我确信我的文件是兼容; .ogv格式,我也试过.mp4)。 我已将我的文件存储在统一的streamingassets文件夹中,我认为这是放置它们的正确位置吗?

我的软件版本是; ovr_sdk_mobile_1.0.3和Unity v5.3.6f1,Oculus Utilities v1.7.0,OVRPlugin v1.5.0,SDK v1.0.3.1。

我尝试过的事情:

  • 不同的视频格式:尝试过big_buck_bunny.mp4,没有区别
  • 附加视频格式/将其删除:无差异
  • 我也试过使用mediaplayer的文件描述符构造函数而不是字符串,这通过统一来做是很尴尬的,它似乎没有什么区别,这是我用来做的代码,尝试使用和不附加文件扩展名:

    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
    AndroidJavaObject assets = context.Call<AndroidJavaObject>("getAssets");
    AndroidJavaObject descriptor = assets.Call<AndroidJavaObject>("openFd", movieName+".ogv");
    mediaPlayer.Call("setDataSource", new object[]{descriptor.Call<object>("getFileDescriptor"),descriptor.Call<object>("getStartOffset"),descriptor.Call<object>("getLength")});
    
  • 在MediaSurfacePlugin的sdk自述文件中说IntPtr androidSurface = OVR_Media_Surface(textureId, 2880, 1440);

然而,这种方法似乎不存在(?),所以我使用下面的代码似乎有效:

OVR_Media_Surface_SetTextureId(texId);
OVR_Media_Surface_SetTextureParms(960, 540);//960/540 is the video resolution
IntPtr androidSurface =  OVR_Media_Surface_GetObject();
  • 前一段时间在oculus论坛上的帖子提到尝试使用callvoid方法而不是callobjectmethod,尝试过,似乎没有改变任何东西:

    AndroidJNI.CallObjectMethod(mediaPlayer.GetRawObject(), setSurfaceMethodId, parms);
    // AndroidJNI.CallVoidMethod(mediaPlayer.GetRawObject(), setSurfaceMethodId, parms);
    
  • 我也看到人们建议在Unity的Unity设置中关闭多线程;再次,这似乎没有什么区别。

我非常感谢这里的任何帮助,我觉得我现在已经尝试了所有的一切!

有没有人成功地使这项工作?

0 个答案:

没有答案