海康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页面,那就能大大的减少转码带来的延迟问题。

java实现海康直播 海康 直播_linux

WebRTC规范中能很好的支持VP8H.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

java实现海康直播 海康 直播_ubuntu_02

启动服务

$ docker run -d --name kms --network host \
    kurento/kurento-media-server:latest

调试服务

KMS对java和nodejs有很好的支持,并且有实现代码,在这里。可以自行下载调试。

java实现海康直播 海康 直播_docker_03

FAQ

  • 安装Gstreamer 的工具名不对
    使用apt-cache search [关键字],模糊查询能够下载的软件名和版本,如果没有使用apt-get update更新一下
  • KMS的使用会有延迟2秒左右
    gstreamer rtsp的播放器有默认的2s中rtp流延迟,需要手动的设置流的延迟时间。