美文网首页
Unity3D中 — 断点下载在ios移动设备中实现视频播放 (

Unity3D中 — 断点下载在ios移动设备中实现视频播放 (

作者: 杭州七木科技 | 来源:发表于2017-08-08 18:32 被阅读0次

    本人最近研究EasyAR的视频播放,官方给出的是分别是 本地视频加载,和网络视频加载。

    需要实现的功能是下载网络视频,保存本地,打包到ios平台中,实现ios移动端扫描视频加载。

    实现功能如下

    扫描识别卡片实现视频播放.jpg

    需要掌握知识点如下

    1.Unity3D在不同平台的路径设置。(1.ios端 2.Android端 3. Windows )
    2.EasyAR 的官方 视频播放脚本 VideoPlayerBaseBehaviour (熟悉文档)
    3.实现视频加载并播放的逻辑
    4.FileStream 在Unity3D和ios平台的执行差别
    

    1.Unity3D常用的四种文件路径

    Application.dataPath 
    Application.streamingAssetsPath 
    Application.persistentDataPath 
    Application.temporaryCachePath 
    

    本人只熟悉ios平台,对其他平台不是很熟悉,其他平台路径可自行百科。

    1. Application.dataPath           
     /var/containers/Bundle/Application/app sandbox/xxx.app/Data 
    
    2. Application.streamingAssetsPath 
    /var/containers/Bundle/Application/app sandbox/test.app/Data/Raw 
    
    3. Application.temporaryCachePath 
    /var/mobile/Containers/Data/Application/app sandbox/Library/Caches 
    
    4. Application.persistentDataPath 
     /var/mobile/Containers/Data/Application/app sandbox/Documents
    
    

    iOS和Mac OS X不同于Windows,app都是在一个沙盒空间中运行,每个app也有一个独立的数据存储空间,各app彼此不能互相访问、打扰。

    dataPath是app程序包安装路径,app本身就在这里,此目录是只读的。streamingAssetsPath是dataPath下的Raw目录。
    app的独立数据存储目录下有三个文件夹:Documents,Library和tmp。

    Documents目录,这个目录用于存储需要长期保存的数据,比如我们的热更新内容就写在这里。需要注意的是,iCloud会自动备份此目录,如果此目录下写入的内容较多,审核的可能会被苹果拒掉。

    Library目录,这个目录下有两个子目录,Caches和Preferences。     
    Caches是一个相对临时的目录,适合存放下载缓存的临时文件,空间不足时可能会被系统清除,Application.temporaryCachePath返回的就是此路径。我把热更新的临时文件写在这里,等一个版本的所有内容更新完全后,再把内容转移到Documents目录。
      
    Preferences用于应用存储偏好设置,用NSUserDefaults读取或设置。

    tmp目录,临时目录,存放应用运行时临时使用的数据。 需要注意的是,以上无论临时、缓存或者普通目录,如果不需要的数据,都请删除。

    2.VideoPlayerBaseBehaviour 脚本
    文档介绍

    VideoPlayerBaseBehaviour Easy官方文档

    3.实现视频加载并播放的逻辑

    设置prefab预控件.png 注意视频的设置路径.png

    代码如下

    public void LoadVideo(string videoName)
            {
                if (System.IO.File.Exists (filePath + "workroom1.mp4") == false) {
                    return;
                } // 判断是否存在下载目录中,在ios移动设备中,就是判断是否存在沙盒中
                subGameObject = Resources.Load ("VideoPlayer") as GameObject; // 实例化事先准备好的预控件prefab
                if (subGameObject != null) { // 因为update 方法会不断调用,所以再次判断是否已经存在实例控件,防止重复加载
                  subGameObject = Instantiate(subGameObject);
                }
                subGameObject.transform.parent = this.transform; //设置物体的父类为当前类
                // 设置参数位置
                subGameObject.transform.localPosition = new Vector3(0, 0.225f, 0);
                subGameObject.transform.localRotation = new Quaternion();
                subGameObject.transform.localScale = new Vector3(1.0f, 0.02f, 0.45f);
    
                // 重点 加载视频的脚本
                VideoPlayerBaseBehaviour videoPlayer = subGameObject.GetComponent<VideoPlayerBaseBehaviour>();
                if (videoPlayer)
                {
                    videoPlayer.Storage = StorageType.Absolute; // StorageType指定了文件存放的根目录,你可以在所有相关接口中使用相对于这个根目录的相对路径 下面会给出官方文档
                    videoPlayer.Path = filePath + videoName; // 视频路径
                    videoPlayer.VideoScaleMode = VideoPlayerBaseBehaviour.ScaleMode.Fill; //视频缩放模式
                    videoPlayer.EnableAutoPlay = true;  // 启用自动播放
                    videoPlayer.EnableLoop = true; // 启用循环播放
                    videoPlayer.Open();   //打开视频 一个异步方法
                }
            }
    

    4.FileStream 在Unity3D和ios平台的执行差别
    使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream 对输入输出进行缓冲,从而提高性能。

    在上篇文章中有代码展示,打包到ios平台中,需要判断下载文件数据是否存在沙盒中。存在的情况下,就不必再关闭FileStream文件,否则程序会崩溃,补充代码判断。

    if (System.IO.File.Exists (savePath) == true  ) { //如果已经下载完毕,并且全部数据写入沙盒(临时文件已经被转换为正式文件)
            return;
        }
        else{           
            fs.Close(); // 关闭流并释放所有资源,同时将缓冲区的没有写入的数据,写入然后再关闭。
            fs.Dispose();//释放流所占用的资源,Dispose()会调用Close(),Close()会调用Flush();    也会写入缓冲区内的数据。
    
        }
    

    相关文章

      网友评论

          本文标题:Unity3D中 — 断点下载在ios移动设备中实现视频播放 (

          本文链接:https://www.haomeiwen.com/subject/bshxrxtx.html