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

本文章由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/

时间: 2024-08-04 18:34:31

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

【Android开发VR实战】二.播放360&#176;全景视频

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53924006 本文出自[DylanAndroid的博客] [Android开发VR实战]二.播放360°全景视频 VR即Virtual Reality虚拟现实.虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中. 那么,如何在Android中去开发VR功能的APP

虚拟现实视频和360°全景视频的区别

最近,我们听到了很多关于虚拟现实视频的消息,包括一些虚拟现实产业巨头对虚拟现实视频的评论.如果VR视频要蓬勃发展,它肯定离不开行业巨头的支持,虚拟现实视频生产技术可以增长得越来越成熟:就是因为虚拟现实视频现在很受欢迎.视频只有更趋于真实,才更能吸引用户首先,希望你知道360度全景视频http://www.heihuoshi.com/ 和虚拟现实视频之间的区别.可以说,目前市场上几乎没有成熟的虚拟现实视频.我们看到的大部分视频都是360度的炒作视频.360度全景摄像机拍摄360度全景图像,通过后期

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

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53125482 作者:cartzhang <图说VR入门>--googleVR 他山之玉 之前分析了一些GoogleVR的代码,画了一些图. 常言:他山之石,可以攻玉.个人觉得googleVR这不能说是石头了吧,入宝山空手而归,岂是程序的风格.我们希望可以拿着googleVR的玉,最起码刻个玉玺吧.哈哈!! 这篇记录一下,g

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

虽然比预期来得晚了些,但YouTube终于支持360度全景视频了,这应该会吸引不少VR(虚拟现实)爱好者.今年1月,Google就表示这一功能将在“接下来”的几周出现.现在YouTube上已经有了一些全景视频,随着相应相机的上市,未来视频也会更多. 360度视频的特点是,用户在观看的过程中可以移动视角,这更令人震撼,也更具互动性.结合Oculus或Google Cardboard等VR设备使用,你在观看过程中还能移动头部,就像真正身处其中一样. 目前,Android版的最新YouTube已经支持

(译)360全景视频制作专题-介绍

译者小序: 在虚拟现实全景拍摄这个领域已经研究有一年多时间了,其中接触和实验过各种类型的拍摄方法以及总结其中各类的优缺点.鉴于公司对于这一部分还没有对外的计划,所以我们自己研究的内容暂时不能作为一个公开话题与大家讨论.不过在一次偶然的机会中发现了stateofvr.com这个网站,简单的扫略了作者关于这方面的总结觉得一是非常用心二是也达到了能够给整个行业起到一定普及作用的功能.虽然是基础的理论知识和经验,但绝对能帮助到一部分想要了解360度全景拍摄的方法与流程,以及那些在行业中但是对所处理的方式

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

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53174895 作者:cartzhang 本来想先介绍国产的deepoon头盔的VR入门. 可能会有人疑惑,这TM不都一样么? 对啊,正是有一样,才有不一样,也就是有一样的地方,也有不同之处. 大部分都是可通用Oculus,那就先说Dk2,然后有空在介绍与Dk2不同的地方. 本篇图说目标,OC安装及其与Unity版本直接的搭配

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

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52959035 作者:cartzhang 本篇为基础篇,适合用纯正小白,还请各位大神绕行. VR先从外形看起来最简单的google VR的Cardboard说起. google发布Cartboar的目的,用简单好玩廉价的方式来体验虚拟现实. 其用来看全景视频的居多,当然也有其他不一样的用途,能在手机上玩的,肯定都可以玩出不同的

Unity2017中VR全景图和全景视频设置

用SteamVR插件做好VR的摄像头后,创造一个sphere,设置合适的大小,放置在跟摄像头一样的位置,视频是在球的内壁上播放的,从球的内部看球的内壁. 拖一张全景图片到球上,sharder用此链接内的http://blog.csdn.net/wuyt2008/article/details/54313474(谢大神提供). 加VideoPlayer组件,在其下VedeoClip中加入想要播放的视频,RenderMode设为MaterialOverride. 使用Play(),Stop()等方法

一张图看懂360&#176;全景和VR的区别

2016年开始,Facebook.谷歌.腾讯.阿里等互联网巨头都已开始抢食VR(虚拟现实)这块的大蛋糕,虚拟现实发展速度惊人.在这样强势发展的背景下,一些产品也开始打着VR的幌子,挂着VR的噱头卖起来360°全景视频. 面对越来越多的“VR产品”,无忧我房李熠将带领大家深入地对虚拟现实,进行了解并且告诉大家如何区分VR与360°全景视频. 一张图告诉你VR与360°全景的区别 什么是VR 通过先进的传感设备,VR产品能够让体验者获得沉浸于另外一个世界的体验,并且能够在这个虚拟世界中与虚拟环境实现