文档章节

RCS video sharing 服务中视频方向和camera选项编解码

晓昏行者
 晓昏行者
发布于 2015/09/17 19:08
字数 966
阅读 28
收藏 1

使用情景:

视频建立以后,发送方很有可能会随意旋转设备的方向,这样其采集的数据也是旋转过的,到了接收方后,显示就会有问题(如,颠倒等)。为了维护发送方和接收方能够实时的同步视频方向,会话需要协同它们的方向步调。

         如果需要支持该功能,需要在发送方invite消息的SDP协议消息中加入以下属性:

a=extmap:7 urn:3gpp:video-orientation,接收方收到以后,也会在响应中加入该tag属性,这样就完成了该功能的协商。Tag中的7是扩展数据帧的扩展id,可以是1-15中的任何一个,用来标识该方向数据的位置,具体参考RFC5285。更多描述参考RCC.07- 2.7.1.2.2。以上所述的视频方向其实包含了数据的方向和发送方camera的选项(前置或者后置),为了方便起见,一下都称为视频方向数据。

获取自己的视频方向:

获取自己的视频实时方向,需要用到AndroidDisplaySurface两个类,通过他们的配合就可以获取出当前camera视频的方向,最终是一个int值。值得注意的是,这两个类获取出来的方向的整数值不一定一样,这需要看设备的环境,比如前后摄像头等。

获取对方的视频方向:

视频发送方将其视频方向进行封装(具体方式见9.3),封装以后,放在视频数据帧的一个扩展位置,然后随视频帧一起打包后通过rtp/rtcp/udp发送给接收方。接收方收到视频帧数据后,可以在帧的扩展位置将视频方向获取出来,然后,在实时的调整到surface view上面。这样,接收方就可以实时的根据发送方的视频方向来调整自己的显示方向。

具体封装打包,参考RFC3550

视频方向格式及编解码

9-1RCC.07- 2.7.1.2.2中定义的rtp帧中的扩展数据,该数据是用一个8位字节进行编码的。前面四位是预留位,用于其他将来用途,后面四位中,从高到低,第一位是视频发送方camera的选项,可编码出2camera选项;后三位是视频数据的方向,可以编码出8种视频方向。

 

9-1 视频方向数据格式

9-1 发送方的方向编码


如表9-1所示为视频方向中的前4种旋转编码。

如表9-2所示为camera2中选项编码。

9-2 发送方camera选项编码

这样配合图9-1,表9-1和表9-2就可以完成一帧视频数据的方向编解码了,具体如下:

编码:

camera选项位和视频方向位四位编码后的数据映射成十进制数字,就是该帧方向编码后的整数值了。比如发送方当前是后置摄像头并且视频顺时针旋转了90度,那么四位编码则是1011,转换成十进制就是11,那么接收方通过帧中的扩展位数据得到的就是11

位运算法则:total = (camera << 3) | orientation

 

解码:

接收方的到11后,对应的转换成二进制就是1011,获取第四位就是发送方camera的选项,获取后三位就是视频的方向。

位运算法则:

Camera = (total & 0x08) >> 3;

Orientation = total & 0x07;


© 著作权归作者所有

晓昏行者
粉丝 1
博文 8
码字总数 1826
作品 0
成都
程序员
私信 提问
Android 硬编硬解退坑指南

抖音、快手在国内迅速走红,也带动了国内短视频的热潮。短视频录制、编辑等等功能,是一项系统性、专业性很强的领域。经过一段时间发展后,有多种方式可以通向罗马,但并不是每一条路都好走。...

_qisen
2018/09/01
0
0
Android音视频之MediaRecorder录制视频

版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/86650116 1 MediaRecorder 录制视频步骤 这篇文章介绍了Android录音MediaRe...

lidongxiu0714
01/25
0
0
FFmpeg从入门到出家(背景介绍)

金山云多媒体SDK团队在移动直播、短视频等项目中遇到了许多FFmpeg问题,特设立《FFmpeg从入门到出家》系列文稿,希望博君一笑的同时,能让大家对FFmpeg有更深入的了解。 视频流媒体中程中视频...

敏哥侃视界
2018/01/04
0
0
AV1:为互联网提供开放、免费的视频编解码工具

从学术研究到进入工业界,Zoe Liu一直在算法和音视频领域,目前在谷歌编解码团队为编解码器AV1做开发支持。Zoe畅谈了评定编解码器的标准,以及AV1的最新进度。本文是『下一代编码器』系列采访...

livevideostack
2017/12/06
0
0
HTML 音频和视频

音频和视频概述 video视频元素 audio音频元素 本章主要探讨HTML5中音频和视频元素,通过这两个原生的媒体元素向HTML页面中嵌入音频和视频。 一、音频和视频概述 首先,我们要理解两个概念:容...

xiaoxiaobukuang
2017/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

程序员随想-关于分享

最早的时候,文字是贵族这些上层人士才会学习的,底层人士没有资格和渠道去学习,同样用文字、图像等其他载体承载的知识大部分也只有贵族阶层才能享受的。后来有了造纸术、印刷术,成本降低,...

Lubby
23分钟前
0
0
聊聊hibernate的session-level repeatable reads

序 本文主要研究一下hibernate的session-level repeatable reads 实例 doInTransaction(session -> { Product product = new Product(); product.setId(1L); product.setQuanti......

go4it
34分钟前
0
0
ubuntu或ubuntu kylin优麒麟中安装QQ、wechat微信、百度网盘

从中国国内的地址下载deepin wine,码云上的。这样网速比较快。然后,按照说明向下安装。 https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu...

gugudu
46分钟前
2
0
基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源...

别打我会飞
今天
14
0
Zookeeper的实践指南

本章重点 1.数据存储2.基于Java API初探Zookeeper的使用3.深入分析Watcher机制的实现原理4.Curator客户端的使用,简单高效 数据存储 事务日志快照日志运行时日志 bin/zookeepe...

须臾之余
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部