RTP时间映射及同步

RTP包中的时间戳字段是说明数据包时间的同步信息,是数据能以正确的时间顺序恢复的关键。时间戳的值给出了分组中数据的第一个字节的采样时间。为了计算各个数据流的播放时间以及同步处理,仅有RTP包中的时间戳信息是不够的。
在整个播放过程中,包括这样几种时间:

  1. RTP包中的rtptime
  2. PLAY请求的Response中的rtp timenpt
  3. RTCPSR(Sender Report)中的rtpntp时间戳对

一、时间戳映射关系

首先介绍PLAY请求的Response里的两个域:
(1)npt
npt顾名思义Normal PLay Time,正常播放时间,指出了流相对与播放开始时的绝对位置。播放开始时的之间定义为0.0s。这个特殊的常量now被定义为现场事件的当前时刻。"now"常数允许客户端请求接收实时反馈而不是存储或者延时的版本。因为对于这种情况而言,既没有绝对时间,也没有0时间,所以需要该参数。
(2)rtptime
rtptime是发送PLAY请求后将收到的第一个RTP包的时间戳值。
nptrtptime的区别在于npt是影片开始的相对时间,而rtptime是会话开始的相对时间。因此在client端,需要对这两者进行map处理。
client端计算播放时间戳的公式如下:

其中:
start_rtptimestart_npt分别是PLAY请求的Response中的rtptimenpt
current_rtpTime是当前收到的RTP包头中的rtptime
scalePLAY请求的Response中的scale值。在正常播放的情况下为1,快速播放时大于1,当处于反向扫描模式时小于-1.

二、媒体间同步方法(不同设备的同步)

上面的处理仅仅实现了媒体内的同步,在实现媒体间同步时,还需要进行其他的处理工作。这就需要用到RTCPSR(Sender Report)。在SR中包含一个<rtpntp>时间戳对,通过这个时间戳对可以将音频和视频准确的定位到一个绝对时间轴上。
<rtpntp>时间戳对的必要性在于不同流的RTP时间戳有不同的随机偏移量,因此无法直接进行同步。
<rtpntp>中的ntp是网络时间协议格式表示的绝对时间值。
<rtpntp>中的RTP与数据包中的RTP时间戳具有相同的单位和偏移量,但在大多数情况下此时间戳不等于任何临近的RTP包中的时间戳。
根据不同stream中的<rtpntp>时间戳对,可以将一个stream中的时间戳值映射为另一个stream的时间戳值,从而实现媒体间的同步。

参考链接


RTP时间映射及同步

Ubuntu 17.10将于1月11日“重新”发布,修复“变砖”问题

Ubuntu 17.10将于111日“重新”发布,表示不会再让本本变砖~

Canonical上个月从Ubuntu的官方网站临时关闭了Ubuntu 17.10的下载通道,并留下通知:

由于在 某些笔记本电脑(主要为联想)上出现BIOS固件问题,导致笔记本电脑无法启动,目前不推荐下载Ubuntu 17.10。待问题解决后,再重新开放。

继续阅读Ubuntu 17.10将于1月11日“重新”发布,修复“变砖”问题

关闭Safari英文矫正功能

macOS High Sierra系统上使用Safari进行搜索的时候,总是莫名其妙的被修改搜索词,导致搜索结果驴唇不对马嘴。搜索了一下,这个锅应该是输入法导致的,最可恶的是不能拒绝输入法的推荐词汇,可以使用如下方式关闭输入法的自动英文矫正功能。

继续阅读关闭Safari英文矫正功能

Ubuntu 14.04.5安装开源跳板机 Jumpserver 开发版(2018.01.08)

参照ubuntu 14.04.5下安装多版本Python(2.7.6/3.4.3/3.6.4),安装配置最新版本的Python 3.6.4Jumpserver需要Python 3.5以上的版本才能正常运行。

目前我们安装的是2018.01.08的开发版Jumpserver,此时的版本信息如下:

安装流程:

如果代码下载失败,可以从本站下载一份代码拷贝。点击这里下载jumpserver,点击这里下载coco

浏览器通过http://127.0.0.1:8080进行访问,默认的用户名密码都是admin

上面都启动成功之后,通过如下命令访问jumpserver

继续阅读Ubuntu 14.04.5安装开源跳板机 Jumpserver 开发版(2018.01.08)

ubuntu 14.04.5下安装多版本Python(2.7.6/3.4.3/3.6.4)

系统环境:ubuntu14.04.5 LTS,系统默认的python版本为2.7.4/3.4.3

但是实际工作中,某些通过pip安装的开发包需要不低于某个版本的python才能正常工作,比如ansible-2.4.2.0,明确只支持python-3.5以上的版本。在低版本的python上,无法正常运行。

而如果我们贸然更新系统python版本的话,会导致系统异常。因此我们借助pyenv实现基于用户的python版本定制。

安装pyenv

查看可以安装的python版本:

这里以安装python-3.6.4为例,首先安装依赖:

安装python

该命令会从github上下载python的源代码,并解压到/tmp目录下,然后在/tmp中执行编译工作。若依赖包没有安装,则会出现编译错误,需要在安装依赖包之后重新执行该命令。

安装完成之后,需要使用如下命令对数据库进行更新:

查看当前已经安装的python版本

其中星号代表是当前系统正在使用的python版本是系统自带的。

设置全局的python版本

从上面,我们可以看出来当前的python版本已经变为了3.6.4。也可以使用pyenv localpyenv shell临时改变python的版本。

如果需要还原设定的python版本为系统自带的版本,则执行如下命令:

确认python版本

上面的操作会导致在当前用户下,执行python或者python3命令的时候都会被定向到python-3.6.4,如果只想执行python3命令的时候被定向到python-3.6.4,则可以直接删除python这个链接:

安装pip

安装完成之后,需要使用如下命令对数据库进行更新:

注意事项:
  • 输入python即可使用新版的python
  • 系统自带的脚本会以/usr/bin/python的方式直接调用老版本的python,因而不会对系统脚本产生影响
  • 使用pip安装第三方模块时会安装到~/.pyenv/versions/3.6.4下,不会和系统模块发生冲突
  • 使用pip安装模块后,可能需要执行pyenv rehash更新数据库

参考链接


Ubuntu 16.04.3系统VirtualBox-5.0.40使用USB设备

Ubuntu版本:16.04.3

Oracle VirtualBox版本:5.0.40

问题:

这是在设置启用USB时提示的错误。关于如何启用UbuntuOracle VM VirtualBoxUSB功能 (Oracle VM VirtualBox设置USB启用USB控制器启用USB 2.0 ECHI控制器)--如果你没有安 装Oracle VM VirtualBox Extension Pack的话,那么这时就会弹出一个提示框,提示上面给出的那段英文提示。

继续阅读Ubuntu 16.04.3系统VirtualBox-5.0.40使用USB设备

ROS国内镜像

从国外下载ROS安装包,有时候会非常耗时。国内镜像的地址参考如下:

参考链接


ROS/Installation/UbuntuMirrors

Ubuntu 14.04.5系统安装Docker-1.6.2操作基础镜像

执行如下命令安装:

启动服务:

测试服务是否正常:

创建基础镜像:

接下来,就是Dockerfile里面的内容了:

构建Docker镜像:

运行刚刚创建好的镜像:

导出刚刚创建好的镜像:

其他机器上加载我们导出的镜像:

删除不再使用的镜像:

如果运行时报错:

则尝试安装:

参考链接