基于vlc的unity3d vr视频播放器开发,简述

2 篇文章 0 订阅
2 篇文章 0 订阅


需求:

项目需要在vr设备(htc vive、pico、小π等vr设备)中显示在线视频和播放本地视频的功能。


茶话:

当前做的比较好有htc vive的ViveCinema,场景做比较漂亮。他使用的是FFmpeg+SDL+GLEW。FFmpeg作为视频解析的库在业内是非常有名,视频的解析是从头实现的,大部分其他开源项目都是基于它来实现解复用、解析等操作。SDL是一套开放源代码的跨平台多媒体开发库,另外在游戏方面使用的人是比较多的。GLEW不用说,opengl wrapper。但是ViveCinema仅支持本地视频,那么在线视频呢?


unity3d是比较轻量级的游戏引擎,在手机3d游戏市场可谓如日中天。其灯光渲染效果可能没有ue4等pc游戏引擎好,但是其操作的简易性,开发效率高等特点,得到了大量vr设备厂商和开发人员的青睐。对于C++程序来说,pc端ue4是最好的选择,C#的内存方面的操作实在蹩脚,p/invoke也是非常蛋疼的。无奈vr设备厂商提供unity3d的包,项目采用unity3d开发。

确定使用unity3d开发,那么问题来了,怎么加载视频呢?


首先需要了解vlc的结构,在此花了大量的时间......


思路是:

1、去vlc官网下载vlc库(http://www.videolan.org/vlc/download-windows.html),当前是vlc-2.2.4-win64.zip;

2、解压,分别将axvlc.dll、libvlc.dll、libvlccore.dll、npvlc.dll四个dll和plugins文件夹拷贝至unity3d项目Assert文件夹;

3、使用p/invoke 实现以上dll的接口,获取vlc视频流、视频相关信息和控制事件;

4、在unity3d中新建一个sprite对象,并添加视频控制的cs代码,进行播放视频功能控制;

5、根据3中的接口控制播放,并取得视频流的回调,新建一个视频流的cache数组,将回调函数中的视频流数据放入cache数组中;

6、开始时在ui线程中,起一个定时器获取视频流数据,我这里设置的是每个20ms执行一次,如果正常播放的话,每秒执行50次,就是50帧,应该够了;

6、定时器中处理,在5中得到cache数组中取一帧数据。使用Texture2D类,新建Texture2D对象,关键函数为LoadRawTextureData,即将二进制流数据转换为texture2d材质。然后使用Sprite.Create()使用转换好的Texture2d变为sprite精灵对象。这样就显示在4中新建的sprite对象中了。

7、还有些乱七八糟的参数和事件,后续慢慢解决...


碰到的问题:

unity3d中如何使用unsafe代码?

a、不知道为什么我的vr机器上VS不能打开unity3d项目的属性,在笔记本上可以打开,打开方法,右键项目属性-Build-General-Allow Unsafe Code打上勾;

b、在unity3d项目的Assert下面新建一个名为:smcs.rsp的文件,文件内容为:-unsafe;

c、修改项目的player setting中Other Settings的Optimization中Api Compatibility Level改为.Net 2.0 Subset。(关键)


简单实现 重播,开始/暂停,下一个等功能。4k视频,这个视频播放时间显示不正确....



欢迎来交流群交流:323929978


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Unity FFmpeg是指在Unity开发环境中使用FFmpeg多媒体框架的方法。FFmpeg是一个强大的多媒体框架,能够解码、编码、转码、复用、分离、流处理、滤波以及播放几乎人类和机器创建的任何内容。 要在Unity中使用FFmpeg,首先你需要获取FFmpeg库。你可以从官网免费下载FFmpeg,也可以花费85美元下载插件FFmpeg Unity Bind,该插件是基于FFmpeg的Unity插件,可以方便地在Unity中调用FFmpeg功能。 使用FFmpeg Unity Bind或者参照其思想,你可以使用命令行参数实现FFmpeg的调用。这意味着你可以通过在Unity中执行相应的命令行来调用FFmpeg功能,例如解码、编码、转码、复用、分离、流处理和滤波等操作。 通过在Unity中使用FFmpeg,你可以实现多媒体的处理和播放,为你的应用程序添加更多的功能和效果。无论是处理音频还是视频,FFmpeg提供了丰富的功能和选项,可以满足各种需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能](https://blog.csdn.net/weixin_34032827/article/details/93848849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值