Facebook开源全景投影转换项目Transform360移植与二次开发

    之前一直在从事VR/全景视频的相关工程工作,也追随学习了一段时间的JVET的360°全景视频标准。

    约在去年12月份左右,开始研究部Facebook关于VR方面的开源项目,研究方向主要是Surround360和Transform360。前者是360°全景采集和拼接开源方案,后者是360°全景视频投影转换开源项目。受限于设备,对Surround360的主要研究止步于构建测试软件与测试序列上进行拼接测试,主要开发工作转向Transform360。

Git:https://github.com/facebook/transform360

    首先简单介绍一下Facebook的Transform360项目。全景视频有许多不同的投影格式,选择不同的投影格式,可以针对不同的应用场景平衡带宽和质量的需求。具体的投影格式标准和相关介绍,参见本人其他博客或JVET专家组在360°全景视频标准上的研究。由于360°视频至今未有统一、通用的国际标准,因此,不同厂商、设备、系统的全景视频存在投影格式转换的需求,Transform360便是解决这一需求的软件系统。简单而言,Transform360完成的是全景视频不同投影格式相互转换的一款软件系统。

    如果仅仅是投影格式转换,其实诸如JVET和其他科研机构,很早就有了针对投影格式的研究平台和转换软件,但是这一类软件通常应用于科研,效率较低,仅能支持非实时离线的转换,对实时性要求较高的应用场景无法适用。Transform360是一款可以支持实时性能的投影格式转换软件,它嵌入在ffmpeg中作为filter使用,可以与ffmpeg一起编译构建,也可以方便提取出来使用。

    在将Transform360按官方案例嵌入到ffmpeg中编译的时候,由于我需要使用的是windows平台,因此需要做交叉编译,而Transform360使用了opencv的库进行映射变换,交叉编译过程出错较多,导致我折腾了很久交叉编译也没有成功。(在Linux平台下编译较为容易)

    因此,之后的一段时间,我通读了源码,并将Transform360从原先的ffmpeg的filter中提取出来,并封装为windows平台下的DirectShow框架的filter使用。由于源码封装较为良好,因此实际移植上也没耗费太多的时间。

Git:https://github.com/EthanXzhang/TransformFilter

    等有空再慢慢讲Transform360的整个结构吧。

    我的移植里面,其实只是把Transform360核心业务拆了出来,然后在工程里依旧使用了ffmpeg做帧的处理及变换,因此数据结构实际上没有太大变换,只是将核心业务的接口从原先的filter中剥离了,又重新写成了函数在当前filter中使用。

你可能感兴趣的:(360Lib,多媒体,多媒体,ffmpeg)