最近实现了NMSv3接收GB28181设备注册,下发指令主动通知摄像头以RTP推流到NMS,转为RTMP, KMP, FLV播放。

NMSv3不是完整的GB28181实现,我将SIP信令与RTP流媒体服务器合二为一,仅作为实时视频取流的用途。

当我准备实现设备注册,密码验证时,找到一篇博文:https://blog.csdn.net/hiccupzhu/article/details/39696981

其中讲到的算法是:

HA1=MD5(username:realm:passwd) #username和realm在字段“Authorization”中可以找到,passwd这个是由客户端和服务器协商得到的,一般情况下UAC端存一个UAS也知道的密码就行了
HA2=MD5(Method:Uri) #Method一般有INVITE, ACK, OPTIONS, BYE, CANCEL, REGISTER;Uri可以在字段“Authorization”找到
response = MD5(HA1:nonce:HA2)

对比REGISTER中的response与计算的response,相同则验证通过。

但我却验证错误,仔细阅读了exosip这部分的代码后,终于找出差异:https://github.com/aurelihein/exosip/blob/master/src/jauth.c#L144

当设备第一次发送REGISTER,NMS回复401, 并附带

还有一种回复是

原来这个qop的设置与否,决定了验证算法的差异。

当不设置qop时,确实是使用上面的那种算法进行验证。而设置为”auth”后,则使用下面的这个算法:

HA1=MD5(username:realm:passwd) #username和realm在字段“Authorization”中可以找到,passwd这个是由客户端和服务器协商得到的,一般情况下UAC端存一个UAS也知道的密码就行了
HA2=MD5(Method:Uri) #Method一般有INVITE, ACK, OPTIONS, BYE, CANCEL, REGISTER;Uri可以在字段“Authorization”找到
response = MD5(HA1:nonce:nc:cnonce:qop:HA2)

可以看出,HA1、HA2是相同的,区别在于resopnse有差别。开发时需要注意这点,如果想使用简单的验证算法,回复401时,不要传qop=”auth”参数。

另外还有一种qop=”auth-int”的算法,这里由于决定权在服务端,所以不做详细研究。如果做向上级级联,则要根据上级401的参数来响应。

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: GB28181 设备注册密码验证算法

华为云服务“通用计算增强型KC1”已正式商用,今天准备测试一下NMSv3的兼容运行情况。如果还没有华为云账户的话,先注册一个

搭载自研华为鲲鹏920处理器及25GE智能高速网卡,提供强劲鲲鹏算力和高性能网络,更好满足政府、互联网等各类企业对云上业务高性价比、安全可靠等诉求。

鲲鹏920是目前业界最高性能ARM-based处理器。该处理器采用7nm制造工艺,基于ARM架构授权,由华为公司自主设计完成。鲲鹏920主频可达2.6GHz,单芯片可支持64核。该芯片集成8通道DDR4,内存带宽超出业界主流46%。芯片集成100G RoCE以太网卡功能,大幅提高系统集成度。鲲鹏920支持PCIe4.0及CCIX接口,可提供640Gbps总带宽,单槽位接口速率为业界主流速率的两倍,有效提升存储及各类加速器的性能。典型主频下,SPECint Benchmark评分超过930,超出业界标杆25%。同时,能效比优于业界标杆30%。鲲鹏920以更低功耗为数据中心提供更强性能。

那我先来开一个最便宜的配置:

kc1.small.11vCPUs | 1GBHuawei Kunpeng 920 2.6GHz0.5/2 Gbit/s200,000¥59.25/月

好了,基本情况就是这样,来下载最新版NMSv3,可以看到北京四机房访问github的速度还不错,6M的程序4秒就完成了。

NMSv3 最新发布地址已更改,使用新的地址和版本。

没有任何问题,运行成功。GO语言开发跨平台软件的优势确实强大,不过由于NMSv3中使用了CGO技术,否则可以生成更多的目标平台。我将会在下阶段移植下龙芯处理器mips64el架构。

打开nms的web后台,一切正常。

推流并在本机播放1000个rtmp测试。

这是一个500kbps变码率的视频,1000个并发内部带宽达到600M左右,cpu占用20%~40%。由于1000个并发测试程序是在本机运行,所以也会占用一定的cpu。

由此可见,华为鲲鹏云KC1实例,即使是最低配置1核1G也是完全能够满足性能需求,因为流媒体应用最大的瓶颈是网络带宽。如果您需要使用到自主服务的话,华为鲲鹏云也是不错的选择。

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 测试华为鲲鹏云KC1实例运行NMSv3

向流媒体服务器推流

NMS v3支持RTMP, HTTP-FLVT推流

使用ffmpeg读取本地文件,向nms推送RTMP流

INPUT_FILE.mp4 是h264+aac编码

INPUT_FILE.mp4 是h264+其他音频编码

INPUT_FILE.mp4 是其他音视频编码

使用ffmpeg读取本地文件,向nms推送HTTP-FLV流

INPUT_FILE.mp4 是h264+aac编码

使用ffmpeg读取RTSP流,向nms推送RTMP流

INPUT_RTSP 是h264+aac编码

使用ffmpeg读取本地H265视频,向nms推送RTMP流

Adobe官方定义RTMP,FLV是不支持H265的,需要使用打过补丁的ffmpeg, 若需要,请与客服联系。

从流媒体服务器播放视频

先确保流媒体服务器存在 /live/stream 流,若不清楚,请查看上一步推流操作

使用ffplay播放 rtmp流

使用ffplay播放 http-flv流

使用ffplay播放 hls流

使用NodePlayer.js 播放 ws-flv流

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 九、NMS基本使用

NodeMedia Dev Server是基于nginx-rtmp-module编译的windows版RTMP服务端完整实例。无需配置,一键运行,是您快速开发,测试,验证RTMP流的好帮手。
可以用来开发:视频直播间,音视频聊天,游戏直播,远程视频监控等。
包含以下实用工具:

  1. RTMP流媒体服务端
  2. Flash Rtmp流播放器
  3. Flash HLS直播流播放器
  4. Flash Rtmp摄像头视频发布器
  5. Flash 视频聊天Demo
  6. 批处理版的视频流循环发布器。

前往下载:http://www.nodemedia.cn/zh/nodemedia-dev-server

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NodeMedia Dev Server

其实是2个,一个基于fibjs,一个基于nodejs
两个版本大部分是一样的,只是在数据处理方面有差异。

fibjs版本:https://github.com/illuspas/NodeMediaServer
fibjs没有回调一说,同步的流程写起来相当舒服。

nodejs版:https://github.com/illuspas/Node-Media-Server
nodejs的数据是on(‘data’)回调回来的,解析rtmp包很费劲,需要根据包头一步一步分析出需要的包大小。为此写了个QueueBuffer类,请求的数据大小足够即返回,不够就回压再等待数据下次继续解析。

目前只支持了H264+AAC,支持多路发布和播放。
fibjs版目前在大并发的时候会阻塞发布端,写得有点问题,空了再改改。
没有缓冲关键帧,播放的启动时间可能会等下一个关键帧来了才开始

此项目仅为空闲时写着玩的,参照了很多别人的代码,并不会长期维护。如果你感兴趣,欢迎fork。

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 开源一个基于js的RTMP服务端

>>>>>整合版,一键运行,点我<<<<<

准备工作

要在 Microsoft Win32??平台上编译Nginx你需要:

  • Microsoft Visual C compiler. Microsoft Visual Studio??8 and 10 are known to work.(用来编译)
  • MSYS.(执行配置脚本)
  • Perl, if you want to build OpenSSL??and nginx with SSL support. For example?ActivePerl?or?Strawberry Perl.(注意这里不能使用MSYS的perl)
  • Mercurial?client.(通过HG下载最新源码)
  • PCRE,?zlib?and?OpenSSL?libraries sources.(PCRE用来重写url,zlib支持页面压缩,这里编译rtmp模块,必须编译出openssl)
  • win32版nginx-rtmp-module模块源代码

编译步骤

在开始之前,你需要将Perl,Mercurial,MSYS bin目录加入PATH环境变量,也就是打开cmd,输入perl,hg,bash不会提示找不到命令.运行vcvarsall.bat或者叫Visual Studio命令提示(2010).继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 编译windows版nginx-rtmp-module

在做完一个基于RTMP的音视频通话软件后,想深入了解下RTMP协议的实现。
项目的服务器环境是FMS,这里,对另一种开源的服务端 Red5做个了解。

需要Jre环境。

下载最新版1.0 RC1?http://trac.red5.org/downloads/1_0/setup-Red5-1.0.0-RC1.exe
安装,在过程中会需要输入服务器IP和HTTP访问的端口号。

安装完毕,运行安装目录下的?red5.bat 一闪而过。OK,用cmd运行。发现报一下错误:

google一番后知道,需要删除lib目录继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 安装配置Red5 Server 1.0 RC1 (一)

Directspace 的Debian 6因为缺少LBS,安装软件时会提示一下错误:
insserv: warning: script ‘S10vzquota’ missing LSB tags and overrides
insserv: warning: script ‘vzquota’ missing LSB tags and overrides
insserv: There is a loop between service vzquota and rmnologin if started
insserv:??loop involving service rmnologin at depth 3
insserv:??loop involving service vzquota at depth 2
insserv:??loop involving service rsyslog at depth 1
insserv: Starting vzquota depends on rmnologin and therefore on system facility $all' which can not be true!
insserv: There is a loop between service vzquota and rmnologin if started
insserv: Starting vzquota depends on rmnologin and therefore on system facility
$all’ which can not be true!
insserv: Starting vzquota depends on rmnologin and therefore on system facility $all' which can not be true!
insserv: Starting vzquota depends on rmnologin and therefore on system facility
$all’ which can not be true!
insserv: exiting now without changing boot order!
update-rc.d: error: insserv rejected the script header
dpkg: error processing screen (–configure):
subprocess installed post-installation script returned error exit status 1
configured to not write apport reports

解决方法:
编辑/etc/init.d/vzquota
在start(){? ?前面添加如下内容:继续阅读

上一篇简单介绍了下配置openbox的方法.今天完整讲解一下流程

要配置轻量级的桌面及远程,其实最方便的系统是Archlinux,也是阿亮最喜欢的桌面版发行版了

不过今天这篇里的宿主机系统是Ubuntu 10.04, VPS是HostRail $1.75/mo 套餐

在Hypervm中选择Rebuild,选择ubuntu-10.04-minimal_10.04_i386 安装最小化的系统

  1. 更新
    仍然使用mirror.peer1.net的源镜像

    deb http://mirror.peer1.net/ubuntu/ lucid main universe multiverse
    deb http://mirror.peer1.net/ubuntu/ lucid-security main universe multiverse
    $ sudo apt-get update
    $ sudo apt-get upgrade

  2. 安装openbox 及vnc
    $ sudo apt-get install openbox obmenu obconf vnc4server xvt fbpanel pcmanfm ttf-wyq-microhei
    obmenu 是图形化配置openbox菜单的工具
    obconf 是openbox的配置工具
    xvt是 Terminal
    pcmanfm是文件管理器
    fbpanel是任务栏
    ttf-wyq-microhei 是文泉驿微黑
  3. 设置登录密码
    $ vncpasswd
    不要使用root账号来运行
  4. 开启vnc服务
    $ vncserver :1
    里面的”:1″代表display号,客户登录的时候得写相同的display号才能登录
  5. 结束vnc服务
    $ vncserver -kill :1
  6. 启动时使用openbox会话
    $ vi ~/.vnc/xstartup
    用#号注释 x-window-manager &这一行,在尾部添加
    openbox-session &
    再次启动vncserver
  7. 启动openbox时自动开启tint2 pcmanfm等
    $ vi ~/.config/openbox/autostart.sh
    fbpanel &
    pcmanfm &
    启动一个加一行
  8. 安装其他应用软件
    firefox ,fcitx…………

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 轻量级VPS安装openbox及vncserver配置图形远程桌面-Ubuntu篇