写点什么

E3PO 进行 360° 视频传输体验 开源赛道 2:畅想 360° 视频传输

作者:Echo_Wish
  • 2023-12-19
    浙江
  • 本文字数:2065 字

    阅读完需:约 7 分钟

E3PO 进行 360° 视频传输体验 开源赛道 2:畅想 360° 视频传输

基于 E3PO 进行 360° 视频传输方案的设计

360° 视频是一种能够提供沉浸式体验的新型媒体,它可以让用户在头显设备中自由地控制视角,观看全方位的场景。然而,360° 视频的传输面临着巨大的挑战,因为它需要传输大量的数据,而用户只能看到其中的一部分。为了节省带宽和提高用户体验,需要设计一些智能的 360° 视频传输方案,根据用户的头动和兴趣,动态地调整视频的分辨率、质量和视场。


E3PO 是一个用于 360° 视频流传输模拟的开源平台,它可以帮助我们快速地设计和评估 360° 视频传输方案,提供了丰富的功能和灵活的接口。在这篇文稿中,我将介绍如何使用 E3PO 来设计一个简单的 360° 视频传输方案,该方案基于以下几个假设:


  • 360° 视频采用等距圆柱投影(Equirectangular Projection,ERP)格式,分辨率为 3840x1920

  • 用户使用头显设备观看 360° 视频,视场角为 90°,头动速度不超过 60°/s

  • 服务器端将 360° 视频划分为 8x4 的均匀分片(Tile),每个分片的分辨率为 480x480

  • 服务器端根据用户的头动预测算法,提前发送用户可能看到的分片,其他分片则发送低质量的版本

  • 客户端根据用户的实际视角,拼接和渲染相应的分片,显示在头显设备中

安装 E3PO

首先,我们需要安装 E3PO 的核心库和相关的依赖库。E3PO 支持 Python 和 C++ 两种语言,我们可以根据自己的喜好选择合适的语言。在这里,我以 Python 为例,介绍如何安装 E3PO。


我们可以使用 git 命令来克隆 E3PO 的源码,如下所示:


git clone https://github.com/bytedance/E3PO.git
复制代码


然后,我们可以使用 pip 命令来安装 E3PO 的依赖库,如下所示:


cd E3POpip install -r requirements.txt
复制代码


安装完成后,我们可以使用以下命令来验证 E3PO 是否安装成功:


import e3poprint(e3po.__version__)
复制代码


如果输出 E3PO 的版本号,如 0.1.0,则说明 E3PO 安装成功。

设计 360° 视频传输方案

接下来,我们可以开始设计 360° 视频传输方案了。E3PO 的核心概念是 scenario,它是一个由多个 component 组成的对象,每个 component 代表一个 360° 视频传输方案的组成部分,如视频源、投影格式、分片方式、头动预测算法、流传输策略等。我们可以使用 E3PO 提供的各种 component 来构建我们想要的 scenario,也可以自定义 component 来实现我们自己的逻辑。


在这里,我们使用 E3PO 提供的以下 component 来构建 360° 视频传输方案的 scenario:


  • VideoSource:用于指定 360° 视频的源文件和分辨率

  • ERPProjection:用于指定 360° 视频的投影格式为 ERP

  • UniformTiling:用于指定 360° 视频的分片方式为 8x4 的均匀分片

  • SimpleHeadMotionPredictor:用于指定 360° 视频的头动预测算法为简单的线性插值

  • AdaptiveStreaming:用于指定 360° 视频的流传输策略为自适应流,根据用户的头动预测结果,提前发送高质量的分片,其他分片则发送低质量的版本


我们可以使用以下代码来构建 360° 视频传输方案的 scenario:


import e3po
# 创建 scenario 对象scenario = e3po.Scenario()
# 创建各个 component 对象,并设置参数video_source = e3po.VideoSource(file_path="video.mp4", resolution=(3840, 1920))erp_projection = e3po.ERPProjection()uniform_tiling = e3po.UniformTiling(rows=8, cols=4)simple_head_motion_predictor = e3po.SimpleHeadMotionPredictor(lookahead=0.5)adaptive_streaming = e3po.AdaptiveStreaming(high_bitrate=10, low_bitrate=1)
# 将 component 添加到 scenario 中scenario.add_component(video_source)scenario.add_component(erp_projection)scenario.add_component(uniform_tiling)scenario.add_component(simple_head_motion_predictor)scenario.add_component(adaptive_streaming)
复制代码

运行 360° 视频传输方案

最后,我们可以运行 360° 视频传输方案了。我们只需要调用 scenario 的 run 方法,就可以启动 360° 视频的模拟过程,如下所示:


# 运行 scenarioscenario.run()
# 等待 scenario 完成scenario.wait()
复制代码


运行完成后,我们可以在 output 文件夹中查看模拟的结果,包括以下几个文件:


  • video_out.mp4:模拟用户在头显设备中实际看到的视频内容

  • video_stats.csv:模拟用户在头显设备中实际看到的视频的统计信息,如分辨率、质量、码率、带宽等

  • head_motion.csv:模拟用户的头动数据,包括时间、视角、速度等

  • tile_map.csv:模拟服务器端发送的分片数据,包括时间、分片编号、质量等


我们可以使用 E3PO 提供的工具来分析和可视化模拟的结果,如下所示:


# 导入 E3PO 的工具模块import e3po.tools as tools
# 分析模拟的结果tools.analyze_output("output")
# 可视化模拟的结果tools.visualize_output("output")
复制代码

总结

在这篇文稿中,我介绍了如何使用 E3PO 来设计一个简单的 360° 视频传输方案,该方案基于 ERP 投影、均匀分片、简单头动预测和自适应流的组合。我们可以看到,使用 E3PO 可以方便地构建和运行 360° 视频传输方案,无需关心底层的细节,只需关注方案的逻辑。E3PO 还提供了丰富的 component,以及灵活的接口,可以满足不同的 360° 视频传输场景的需求。

发布于: 刚刚阅读数: 5
用户头像

Echo_Wish

关注

一个本应成为程序员但变成了土木狗的 2022-08-03 加入

学习,分享,进步

评论

发布
暂无评论
E3PO 进行 360° 视频传输体验 开源赛道 2:畅想 360° 视频传输_技术_Echo_Wish_InfoQ写作社区