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

使用情景:

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

         如果需要支持该功能,需要在发送方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种视频方向。

 

190239_EdDr_1239922.png

9-1 视频方向数据格式

9-1 发送方的方向编码

190447_8MO6_1239922.png

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

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

9-2 发送方camera选项编码

190708_Hi55_1239922.png

这样配合图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;


转载于:https://my.oschina.net/u/1239922/blog/507811

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值