海康rtsp视频流直播-kurento
简述
有在之前的博文中写到使用nginx和ffmpeg来是实现视频流的传输,但是需要在实际的生活中使用还需要一点改进,其中环境搭建和延迟的是个棘手的问题,实现rtsp流的传输需要依赖两个第三方工具,并且还得根据需求进行手动配置,大大提升开发的维护成本。
在延迟方面,相对于HLS直播方式来说,播放延迟已经有了很大的降低,但是使用过程中还是存在2-3s的延迟,对于一些实时性较高的环境来说,无疑是一个很大的问题。
在插件方面,在2020年底,flash正式禁用,而rtmp的播放依赖于这插件,这又对使用的环境有了局限性。
综合以上几点:
- 安装搭建复杂
- 延迟有2-3秒
- 播放RTMP需要插件
这些问题是实际应用中不能广泛使用的原因。
在前面说的几个方案中,其中有说到webrtc,全名Web Real-Time Communication,能够大大的降低音频和视频实时通信延迟,延迟可以在500ms左右。
目前kurento就能很好的包视频就转成webrtc发送到web页面中。在之前的nginx和FFmpeg中,延迟大多是因为FFmpeg的RTSP转RTMP流是的延迟,如果是能够实现RTSP流直接传输到web页面,那就能大大的减少转码带来的延迟问题。
WebRTC规范中能很好的支持VP8 和H.264 视频编解码器,因此支持WebRTC的浏览器能够直接播放摄像头的流数据,不需要转码的过程。
kurento中的agnosticbin 的组件就是解决发送数据流到webrtc中,Gstreamer解决视频流的信息获取,在ubuntu16.04和ubuntu18.04中就自带有Gstreamer的环境,有些插件需要手动的安装,kurento media server目前也只支持ubuntu,跨品台的可以考虑docker安装。
系统环境
- ubuntu 16.04
- DS-2CD2T25D 海康设备
- kurento-media-server
- Gstreamer1.0
如果有使用虚拟机的需要考虑网络和cpu硬件解码的问题,不建议使用虚拟机进行测试开发
Gstreamer的使用
安装工具软件
$ apt isntall gstreamer1.0-vaapi # 播放工具
$ apt install gstreamer1.0-plugins-bad # 解码工具
$ gst-launch-1.0 vaapi # 查看插件命令
执行命令
$ gst-launch-1.0 -v rtspsrc location=rtsp://admin:hik12345@192.168.1.100:554 ! rtph264depay ! capsfilter caps="video/x-h264" ! h264parse ! vaapih264dec ! vaapisink sync=false
如果能正常的播放,并且播放没有延迟,说明你的播放地址没有问题;如果有延迟,需要检查一下播放源是否存在编解码问题。
kurento的安装
kurento的安装有两种,一种是apt安装;另一种是docker安装
这里先使用apt安装,国内安装时间比较长,我这里大概使用了1小时,官网也有很详细的安装教程
本地安装
1、去表GnuPG已经被安装
sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
gnupg
2、kurento的文件库配置
# Import the Kurento repository signing key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
# Get Ubuntu version definitions
source /etc/upstream-release/lsb-release 2>/dev/null || source /etc/lsb-release
# Add the repository to Apt
sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
# Kurento Media Server - Release packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.14.0 $DISTRIB_CODENAME kms6
EOF
3、安装KMS(kurento media server)
sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
kurento-media-server
可以通过命令启动和关闭软件
sudo service kurento-media-server start sudo service kurento-media-server stop
本地安装调试不需要安装配置sturn或turn。然而,如果你想在云端部署,并且可以通过NAT路由连接到你的摄像头,那么就需要安装Coturn来搭建Stun/turn服务。这里就不做,如果想深入了解,推荐文章。
docker安装
国内的apt方式安装过慢,可以使用docker安装的方式
1、确保docker安装
$ sudo su
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ sudo systemctl enable docker
提高拉取image源速度,在 /etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建):
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
服务重启:
$ systemctl daemon-reload
$ systemctl restart docker
2、拉取KMS(kurento-media-server)
$ docker pull kurento/kurento-media-server
启动服务
$ docker run -d --name kms --network host \
kurento/kurento-media-server:latest
调试服务
KMS对java和nodejs有很好的支持,并且有实现代码,在这里。可以自行下载调试。
FAQ
- 安装Gstreamer 的工具名不对
使用apt-cache search [关键字],模糊查询能够下载的软件名和版本,如果没有使用apt-get update
更新一下 - KMS的使用会有延迟2秒左右
gstreamer rtsp的播放器有默认的2s中rtp流延迟,需要手动的设置流的延迟时间。