热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(一)VR播放器项目介绍和到目前为止的工作进展

前言今年本人考上研究生,全景VR视频流媒体播放器设计与实现是我的本科设计,这个毕设我在考研后就呆在实验室琢磨一个月了,没动代码࿰


前言


        今年本人考上研究生,全景VR视频流媒体播放器设计与实现是我的本科设计,这个毕设我在考研后就呆在实验室琢磨一个月了,没动代码,然后放寒假,现在开学一个月左右,这一个月倒是开始着手改进代码,没错,你没听错,改,不是从头开始,不是白手起家,我不是什么大神,VR又是这一两年这么新的东西,虽然本科是计算机专业,但感觉也没学到啥太多,可能我大学四年太荒废了把,可偏偏遇到对毕设很严格的导师,不自己动手研究是不行的,网上根本找到不到什么参考资料。改了一个月了,想写写博客,记录记录,当作读书笔记把,以后也好和人吹吹牛皮把。




毕设介绍


        VR播放器是基于虚拟现实(VirtualReality VR)技术的播放器,播放根据视频源文件,可以播放2D平面及3D全影视频,基本场景是观影者戴上显示头盔(如HTC Vive),在其中通过头部的转动可以看到全景视频的每个方向的图像。同时也能听到来自各个方向的声音,声音也会随着头部的转动而发生变化。通过这种视频和声音与人的头部转动的配合,来给人一种身临其境的感觉。360度全景视频是将多视角二维平面视频以360度全景呈现给观赏者的视频,可达到身临其境再现场景的效果,本课题需要基于OpenVR和HTC Vive设计和实现对VR视频流媒体高效播放器。




基本流程


        1输入:全景视频的封装格式(mp4,avi等)或音视频的压缩格式(音:acc,mp3等,视:h.264等)或者音视频的采样(PCM)/像素(RGB or YUV)数据,用ffmpeg实现。
        2映射贴图:提取视频帧,以opencv的Mat格式存储帧,然后对每一帧进行天空盒六面映射。
        3音视频同步:用ffmpeg实现。
        4显示:用SDL,openvr实现在HTC Vive眼镜显示。




两个基本代码来源


        代码a.0:实验室各位学长学姐的成果,流程是输入一张全景图片,生成六张天空盒的图片并且保存下来,而且全景图在显示屏上显示六分之一,然后根据上下左右按键可以实现移动视角,显示屏显示的内容也会跟着移动。
        代码b.0:https://github.com/ValveSoftware/openvr/tree/master/samples/hellovr_opengl 这是一个github上openvr项目的一个样例,拿过来并不能直接运行。
        代码b.1:实验室一个学长改进了下,主要是增加了一个SetupRC()初始化函数,功能是读取六张天空盒图片,然后贴图映射绑定啥的,也删了一些东西,然后就可以在VR眼镜上显示观看这六张天空盒组成的全景图。


        注:我的毕设就是在这基础上改进的,我并不觉得有啥丢人的,我只是普通人,我觉得在别人代码上改进也很难;后面可以的话我会把这原始代码贴上来,挺大的,一个两千行的代码,一个六百行的代码,当初一个月没动手,在琢磨,就是一脸蒙蔽,完全不懂如何下手这两个代码,用的语言是C或C++,但里面基本都是一大坨各种库的函数,也没有介绍,反正就是当初看得心累。




电脑的一些相关配置


1 购买HTC配件并且配置:https://www.vive.com/cn/product/
            1.1硬件:两个VIVE定位器,两个VIVE手柄控制器,一个头盔眼镜。
            1.2软件:VIVE软件,Steam VR




2 VS2017配库文件:主要是opencv库盒cuda一起编译(用CMake)出一个opencv_cuda库(这一步其实挺麻烦的,我当初本想把项目移植到我自己的笔记本电脑上,编译配置过这些库特备麻烦,后面由于显卡和VR定位器等硬性条件不能移植,只能在实验室固定电脑上该代码),以及opengl库,ffmpeg库,SDL库一起配置进去,大部分库配置步骤都是include lib .dll PATH四个方面,不懂可以自行百度。配完后创建一个项目添加如下代码测试是否报错:
#include
#include
#include
#if defined( OSX )
#include
#include
#include
#define APIENTRY
#else
#include
#endif
#include
#include
#include
#include
#include "shared/lodepng.h"
#include "shared/Matrices.h"
#include "shared/pathtools.h"
#if defined(POSIX)
#include "unistd.h"
#endif
#ifndef _WIN32
#define APIENTRY
#endif
#ifndef _countof
#define _countof(x) (sizeof(x)/sizeof((x)[0]))
#endif
#include // OpenGL toolkit
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include


注:这里我默认各位都大概对计算机方面有所了解,就不具体介绍怎么配置的了。




目前工作进展


1把代码a.0改成a.1,实现读取全景视频,播放全景视频,上下左右按键移动显示屏视角,显示屏只有一个窗口,不是双目窗口。

2把代码a.1改成a.2,主要是封装改进成一个映射贴图函数remap6(),主要功能是把输入一张图片,输出六张天空盒图片。

3把代码b.1+a.2改成c.0,实现读取全景视频,VR眼镜显示全景视频。


456...有待实现:读取播放音频,实现音视频同步,调整播放速度,增加暂停/播放等功能。




注:后续会详细介绍1 2 3的实现。



推荐阅读
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Python SDK,即Python软件开发工具包,是为开发者提供的一系列工具和库,旨在简化使用Python进行应用程序开发的过程。它不仅包括了基本的编程接口,还涵盖了各种实用工具和示例代码,帮助开发者更高效地构建和测试软件。通过使用Python SDK,开发者可以轻松集成复杂的功能模块,提高开发效率和代码质量。 ... [详细]
  • 本文深入探讨了WinRing0及其源代码实现,详细解析了如何通过获取Ring0权限在应用程序中直接执行需要Ring0权限的CPU指令。此外,文章还提供了实例截图和核心代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在VS2013中编译FFMPEG时遇到的问题及解决方案
    在使用VS2013编译旧版本FFMPEG库时遇到了一些问题,因为官方并未提供预编译的LIB和DLL文件。由于对Linux环境不熟悉,只能在Windows环境下进行配置和编译。具体步骤如下:首先,下载FFMPEG的源代码;然后,安装必要的编译工具和依赖项;接着,配置Visual Studio 2013的项目设置;最后,解决编译过程中出现的各种错误和警告。通过这些步骤,最终成功编译出所需的FFMPEG库文件。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
author-avatar
手浪用户2602933263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有