当前位置:   article > 正文

Unity之快速读取多个视频ab文件_unity怎么打开ab文件

unity怎么打开ab文件

压缩方式选择BuildAssetBundleOptions.UncompressedAssetBundle即可。

1.需求

一般有动态修改要求的资源都会存放在StreamingAssets中,但是考虑到这个文件夹中的资源会原封不动的打包,所以通过打包成ab再加载的方式防止宝贵的视频资源被直接盗版取用。

2.打包

通过管道给视频资源原名称打包,核心代码如下:

		[MenuItem("Tools/Build AssetBundles")]
		public static void Build() {
			ClearExitAssetBundleNames();

            if(buildTarget == BuildTarget.NoTarget) {
                switch(EditorUserBuildSettings.activeBuildTarget) {
                    case BuildTarget.WebGL:
                        buildTarget = BuildTarget.WebGL;
                        break;
                    case BuildTarget.StandaloneWindows64:
                        buildTarget = BuildTarget.StandaloneWindows64;
                        break;
                }
            }

            Debug.Log("当前打包平台为:" + buildTarget);

			Object[] arr = Selection.objects;
			if (arr.Length == 0) {
				Debug.Log("Please choose folders that in the Project panel to pack.");
			}

			for (int i = 0; i < arr.Length; i++) {
				string resPath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/')) + "/" + AssetDatabase.GetAssetPath(arr[i]);
				DirectoryInfo directoryInfo = new DirectoryInfo(resPath);
				string targetPath = Application.streamingAssetsPath + "/AssetBundles";

				SetAssetBundleNames(directoryInfo);
				if (!Directory.Exists(targetPath)) {
					Directory.CreateDirectory(targetPath);
				}

				BuildPipeline.BuildAssetBundles(targetPath, BuildAssetBundleOptions.None, buildTarget);
				ClearExitAssetBundleNames();
				AssetDatabase.Refresh();
			}
		}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

1.通过EditorUserBuildSettings.activeBuildTarget自动确定当前打包平台;
2.通过Selection打包当前文件夹下所有视频文件。

3.读取

打包成ab后,我们还需要加载视频资源,再通过VideoPlayer或其他方式进行播放等操作。
1.通过AssetBundleManifest获得所有ab名称再组合路径一个个的去读取;
2.通过ab名再组合路径一个个的去读取。

两个加密后的视频文件:
1)7分46秒 296MB
2)49秒 31.7MB
通过各种方式得到不同的Load效率时间:

                Debug.Log("开始:" + System.DateTime.Now + "  " + System.DateTime.Now.Millisecond);
                14s 2s
                //AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
                //VideoClip clip = assetBundle.LoadAsset<VideoClip>(elementInfos[selectElement]);

                //18s 1s
                //AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(path);
                //VideoClip clip = assetBundleCreateRequest.assetBundle.LoadAsset<VideoClip>(elementInfos[selectElement]);

                //15s 1s
                //AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
                //AssetBundleRequest assetBundleRequest = assetBundle.LoadAssetAsync<VideoClip>(elementInfos[selectElement]);
                //VideoClip clip = assetBundleRequest.asset as VideoClip;

                //16s 2s
                AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(path);
                AssetBundleRequest assetBundleRequest = assetBundleCreateRequest.assetBundle.LoadAssetAsync<VideoClip>(elementInfos[selectElement]);
                VideoClip clip = assetBundleRequest.asset as VideoClip;
                Debug.Log("结束:" + System.DateTime.Now + "  " + System.DateTime.Now.Millisecond);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

我们对加载文件和加载资源两个环节进行了不同情况的异步处理,通过上面的代码,我们可以发现:视频越大,读取时间越慢;视频越小,读取时间越快。

大视频最快14s的速度,如果是做产品,那不用上线了,我们怎么办呢?

4.解决

1)原始视频
在这里插入图片描述
2)方式一压缩
在这里插入图片描述
3)方式二压缩
在这里插入图片描述
通过这三张图,我们可以发现,压缩方式一相对原视频节省了上千个字节,但是压缩方式二相对原视频却多了4-5个字节。

压缩方式一:BuildAssetBundleOptions.None;
在本文第二节的打包代码中可以看到,也是第三节读取中使用的ab模式。
压缩方式二:BuildAssetBundleOptions.UncompressedAssetBundle;
不压缩,也是最终使用的方式,视频的读取不论在Editor模式或者Windows发布后都可以做到秒响应,无延迟,与第三节的四种读取方式无关。

虽然通过api修改了打包选项达到了无延迟读取的需求,但是压缩后的资源反而还比原视频更占空间,我们怎么办呢?
7z压缩或许是个方向,等下次笔者有了发现,再来与大家交流。
最后,祝大家2020春节快乐!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/92025
推荐阅读
相关标签
  

闽ICP备14008679号