本文章由cartzhang编写,转载请注明出处。 所有权利保留。

文章链接:http://blog.csdn.net/cartzhang/article/details/53674647

作者:cartzhang

《图说VR入门》——360全景视频

本章用使用较早的Unity OC 插件来实现一个360全景视频,且通过使用不同的路径配置,可以随意切换视频内容。这样省去了多次打包的过程,简单易用。

当然,你可以花费40刀来购买一个。

https://www.assetstore.unity3d.com/cn/#!/content/35102

这个还是听贵的。

还是制作一个免费的吧!!!

打包后的可下载地址,没有密码:

OC 版本 0.8.0 云盘地址:

http://pan.baidu.com/s/1nv4QLuD

OC版本0.4.4云盘地址:

http://pan.baidu.com/s/1jI8uDRC

一、所需资源

简单制作一个360的全景视频,需要资源有:

AVPro Windows Media2.9.0 unity插件

下载地址:

http://pan.baidu.com/s/1bz7pc6



需要安装OC的0.4.4runtime:

http://pan.baidu.com/s/1jIJPXCa



图1



Untiy所使用版本:



图2

二、制作一个360的VR视频

1.导入插件

导入AVPro Windows Media2.9.0插件



图6



找到他给出的预制体如下图:



图7



然后选择视频文件:



图8

2.解码器安装

若这时候运行,就会报错,如下

根据报错:

For MP4 files you need an MP4 splitter such as Haali Media Splitter or GDCL.



图9



若感兴趣想深入了解的,可以看看如下地址:

http://haali.su/mkv/



若来这里直接下载所需要的解码器:

下载地址:



然后安装:



图10



图11



然后再次加载Load测试:

若看到如下就说明解码器安装成功



图12

3.设置视频加载配置和运行设置

首先,需要把原来的主相机屏蔽,然后添加OC的相机预制体



图13



然后,添加写好的配置文件代码:



图15



最后要注意,不要勾选Virtual Reality supported选项,因为我们使用的是低版本的OCruntime插件。



图14



当然,我也打包测试了OC 0.8.0的Runtime,可能相对与0.4.4版本,OC造成的崩溃可能性会小点。这个没有详细测试,只是相信Unity嵌入和OC的版本升级优化能力。

打包后的文件也会在后面给出下载链接地址。

三、使用配置文件来打包后随时修改视频内容

直接修改AVProWindowsMediaMovie.cs中的LoadMovie函数。


bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32); //string filePath = GetFilePath();
string filePath = ConfigFile.Cconfig.VediofullPathName; if (_moviePlayer.StartVideo(filePath, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD, _allowAudio, _useAudioDelay, _useAudioMixer, _useDisplaySync, _ignoreFlips, _textureFilterMode, _textureWrapMode))
{
if (_allowAudio)
{
_moviePlayer.Volume = _volume;
_moviePlayer.AudioBalance = _audioBalance;
}
_moviePlayer.Loop = _loop;
if (autoPlay)
{
_moviePlayer.Play();
}
}
else

其实所要修改的只是视频的加载路径,仅此而已。

只需更改:

//string filePath = GetFilePath();
string filePath = ConfigFile.Cconfig.VediofullPathName;

这样就可以了。



配置文件的脚本:

using UnityEngine;
using System;
using System.IO;
using System.Xml.Serialization; public class ConfigFile : MonoBehaviour { public static ConfigFile Instance { private set; get; }
public static ClientConfigReference Cconfig; void Awake()
{
try
{
ReadConfigFile(Application.streamingAssetsPath + "/Configfile.xml");
}
catch (Exception ex)
{
Debug.LogError("Read XML Failed ! " + ex.Message);
}
} void ReadConfigFile(string filePath)
{
try
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
XmlSerializer xs = new XmlSerializer(typeof(ClientConfigReference));
Cconfig = xs.Deserialize(fs) as ClientConfigReference;
fs.Dispose();
Debug.Log("Configfile :" + filePath);
}
catch (Exception ex)
{
Debug.LogError("Read ConfigFile Failed ! " + ex.Message);
}
}
} // configure class
public class ClientConfigReference
{
public string VediofullPathName;
}

这个只需要挂载在场景中即可,不需要任何操作。



图15

四、球内使用的shader

360SphereVideo中sphere中使用的材质的Shader.

Shader "Unlit/InsideSphere"
{
Properties
{
// we have removed support for texture tiling/offset,
// so make them not be displayed in material inspector
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Cull Off Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" struct appdata
{
float4 vertex : POSITION; // vertex position
float2 uv : TEXCOORD0; // texture coordinate
}; struct v2f
{
float2 uv : TEXCOORD0; // texture coordinate
float4 vertex : SV_POSITION; // clip space position
}; uniform float4 _MainTex_ST; v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv.xy = TRANSFORM_TEX(float2(1-v.uv.x, v.uv.y), _MainTex); return o;
} sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target
{
// sample texture and return it
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
ENDCG
}
}
}

有兴趣的自行研究下。

五、打包后运行测试:

1. 先使用的星空:

资源可以在文章后面地址下载:

看看美丽星空:



图16



图17



图18



图19



可以看到,这是单眼效果,因为使用大鹏头盔,使用复制屏的效果,分辨率不对造成的,但是在直接运行过中,不影响使用和体验。

2. 来看美女了

通过切换配置文件中

 <VediofullPathName>H:\Unity\UnitySay\360Video\360Demo\360VedioTest\Assets\StreamingAssets\猫耳娘SEASON 2.mp4</VediofullPathName>

来切换视频内容了。



图20



图21



图22



图23



由于纹理清晰度不是很高,这个需要提高的。

还有就是由于使用旧版的OC,所以可能会崩溃。崩溃日志如下:

检重要的贴出来


========== OUTPUTING STACK TRACE ================== ERROR: SymGetSymFromAddr64, GetLastError: '试图访问无效的地址。 ' (Address: 6CF02036)
6CF02036 (OculusPlugin)
6CF03012 (OculusPlugin) OVR_SetViewport
6CF030D3 (OculusPlugin) UnitySetGraphicsDevice
01040016 (001) RectT<int>::Contains
01040058 (001) RectT<int>::Contains
0104054B (001) RectT<int>::Contains
100399D8 (mono) mono_lookup_pinvoke_call
100484DE (mono) mono_marshal_string_to_utf16
100CF9DD (mono) mono_inst_name
100EF02C (mono) mono_set_defaults
100EFE79 (mono) mono_set_defaults
100F03D4 (mono) mono_set_defaults
100F059D (mono) mono_set_defaults
1005D872 (mono) mono_runtime_invoke
00FC47FE (001) scripting_gchandle_get_target
01077709 (001) ScriptingArguments::AddString
0107777E (001) ScriptingArguments::AddString
010777DC (001) ScriptingArguments::AddString
00FB3462 (001) ReportScriptingObjectsTransfer::TransferTypeless
00FB3669 (001) ReportScriptingObjectsTransfer::TransferTypeless
00FB5988 (001) GetMonoBehaviourInConstructor
00FB3B7C (001) ReportScriptingObjectsTransfer::TransferTypeless
0109768B (001) RegisterAllowNameConversionInDerivedTypes
0109785D (001) RegisterAllowNameConversionInDerivedTypes
01050908 (001) CallbackArray3<std::basic_string<char,std::char_traits<char>,stl_allocator<char,59,16> > const &,AwakeFromLoadQueue &,enum LoadSceneOperation::LoadingMode>::Invoke
01050B0F (001) CallbackArray3<std::basic_string<char,std::char_traits<char>,stl_allocator<char,59,16> > const &,AwakeFromLoadQueue &,enum LoadSceneOperation::LoadingMode>::Invoke
.... ========== END OF STACKTRACE ===========

就这样。



所以,还是刚才说的,你可以使用更高版本的OC的0.8.0版本的打包版本。

六、资源下载地址:

猫耳娘视频地址云盘下载: https://pan.baidu.com/s/1qYtVhfe



星空视频云盘下载:https://pan.baidu.com/s/1c2rBNo8



更多可地址:http://vr.diyiapp.com/vrsp/



工程下载github地址:

https://github.com/cartzhang/ImgSayVRabc/tree/master/360Vedio/360Demo/360VedioTest



工程下载后,需要把视频文件放在StreamingAssets下,然后使用配置文件Configfile.xml就可以使用了。



工程release地址:打包后,直接在StreamingAssets下添加新的视频文件,然后使用配置文件Configfile.xml就可以使用。就是这么简单,快捷。

解码器下载地址:

http://pan.baidu.com/s/1o80fjXS

http://pan.baidu.com/s/1mhVbk5U



OC 0.4.4插件下载地址:

http://pan.baidu.com/s/1gfA2TwR



AVPro Windows Media2.9.0 下载地址:

http://pan.baidu.com/s/1gfPvXyr



360视频游戏打包完整地址:

OC版本0.4.4云盘地址:

http://pan.baidu.com/s/1jI8uDRC



OC 版本 0.8.0 云盘地址:

http://pan.baidu.com/s/1nv4QLuD

七、参考

[1]. http://www.panduoduo.net/s/name/%E5%85%A8%E6%99%AF%E8%A7%86%E9%A2%91

[2]. http://bernieroehl.com/360stereoinunity/

[3]. http://download.videolan.org/pub/videolan/x264/binaries/win64/

[4]. http://www.divx.com/zh-hans/software/download/start

[5].http://vr.diyiapp.com/vrsp/

《图说VR入门》——360全景视频的更多相关文章

  1. 《图说VR入门》——入门汇总

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53818922 作者:car ...

  2. 《图说VR入门》——DeepoonVR的大鹏(陀螺仪)枪

    <图说VR入门>--VR大朋的(陀螺仪)枪 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/ar ...

  3. 《图说VR入门》——Unity插件DK2使用教程

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53339254 作者:car ...

  4. 《图说VR入门》——googleVR 他山之玉

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53125482 作者:car ...

  5. 全景VR视频外包公司:长年承接VR全景视频外包(技术分享YouTube的360全景视频)

    虽然比预期来得晚了些,但YouTube终于支持360度全景视频了,这应该会吸引不少VR(虚拟现实)爱好者.今年1月,Google就表示这一功能将在“接下来”的几周出现.现在YouTube上已经有了一些 ...

  6. 《图说VR入门》——DK2入门及其资源汇总

    本文章由cartzhang编写,转载请注明出处. 全部权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53174895 作者:car ...

  7. 《图说VR入门》——googleVR入门

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52959035 作者:car ...

  8. 《图说VR入门》——googleVR入门代码分析

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53013843 作者:car ...

  9. 一张图看懂360°全景和VR的区别

    2016年开始,Facebook.谷歌.腾讯.阿里等互联网巨头都已开始抢食VR(虚拟现实)这块的大蛋糕,虚拟现实发展速度惊人.在这样强势发展的背景下,一些产品也开始打着VR的幌子,挂着VR的噱头卖起来 ...

随机推荐

  1. MySQL——优化ORDER BY语句

    本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的朋友们可以先看一下我之前写过的索引相关文章.现在让我们开始吧. MySQL中的两种排序方式 1.通过有序索引顺 ...

  2. python数据类型之间的转换

    1,字符串转整型,前提条件是该字符串为纯数字. a = '1' a = int(a) 2,整型转字符串 a= 1 a = str(a) 3,整型转浮点型 a = 1 a = float(a) 4,浮点 ...

  3. 获取本地机器的特征码IP MAC

    using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Ma ...

  4. Oracle 当数据库的表没有drop操作就可以通过如下方式恢复表数据

    --执行下列语句可查询出相关时间点 select * from sys.smon_scn_time order by time_dp desc; --执行下列语句可将某个时间点的数据恢复 insert ...

  5. 邮件客户端修改密码—OWA

    邮件客户端修改密码—OWA 1.登录OWA 2.输入用户名 3.点击选项 4.更改密码

  6. 第二次项目冲刺(Beta版本)2017/12/6

    一.任务明细 二.燃尽图 三.站立式会议 1.照片(随后上传) 2.会议任务安排 四.总结 第一天冲刺,准备工作不足啊,期末了,最近大家都比较忙吧,开始战斗吧.

  7. BZOJ 1085 骑士精神 迭代加深搜索+A*

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1085 题目大意: 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个 ...

  8. 协程运行原理猜测: async/await

    1.根据await调用链寻找最终的生产者或服务提供者: 2.请求服务: 3.进行执行环境切换,跳出顶层函数(第一个无await修饰的函数),执行后面的语句: 4.服务完成,将服务数据复制给最底层的aw ...

  9. Winfrom 使用WCF 实现双工通讯

    实现双工通讯主要分三步. 通信接口的定义: 被调用接口的实现 双工通道的建立 请先引用DLL(CSDN的代码编辑器真尼玛蛋疼) 整个解决方案的结构 1.通信接口的定义: 服务端调用客户端接口IServ ...

  10. WCF简单实例--用Winform启动和引用

    以订票为例简单应用wcf程序,需要的朋友可以参考下 本篇转自百度文档,自己试过,确实可以用. 以订票为例简单应用wcf 新建一个wcf服务应用程序 在IService1.cs定义服务契约 namesp ...