热门标签 | 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的实现。



推荐阅读
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
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社区 版权所有