IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 国标28181:实时视频播放 -> 正文阅读

[系统运维]国标28181:实时视频播放

流程

一个流媒体平台主要分为一些几个部分

主要用途:对接监控摄像头、视频直播、多对多视频聊天器

系统架构由三个部分组成:

  • 接口服务器(HTTP服务器)主要用于响应客户端的请求
  • 信令服务器(SIP服务器)主要用于和流媒体服务器和视频设备交互,主要功能是管理摄像头之类的设备以及控制摄像头将视频流转发给流媒体服务器的哪个端口
  • 流媒体服务器主要用于处理视频流的接收、转发和分发

接口服务器和信令服务器可以整合为一个服务器。

流媒体服务器最好单独部署,避免流媒体服务器压力过大,可以用ZLMediaKit代替。我们要开发的就是接口服务器和信令服务器。

实时码流点播采用SPI协议中的INVITE方法实现会话连接,采用RTP/RTCP协议实现媒体传输。

整个播放过程如下:

在这里插入图片描述

其通信流程如下:

在这里插入图片描述

视频流是怎么推流的

SIP视频流的获取是指解码器(ZLMediaKit)通过SIP协议向GB28181服务器获取视频流的过程

  • GB28181服务器(也就是SIP服务器)会像摄像头发送一些信令,主要是请求播放实时视频。
    • 开启SIP服务器,服务器将会监听某个端口,可以从这个端口收到SDP信息
    • 摄像机端发送Register消息后,然后服务端应答注册消息代码
    • SIP服务端响应注册命令后,发送Invite请求,请求catalog信息,也就是设备基本信息
    • 摄像机端收到消息发送其自身的catalog消息,将会服务具体的具体的catalog消息。
    • SIP服务取都摄像机的信息后就可以发送请求视频信息到摄像头。下面看下SDP信息怎么写
static string createSDP(MediaContext& mediaContext)
{
	char str[500] = { 0 };
	pj_ansi_snprintf(str, 500,
	"v=0\n"
	"o=%s 0 0 IN IP4 %s\n"
	"s=Play\n"
	"c=IN IP4 %s\n"
	"t=0 0\n"
	"m=video %d RTP/AVP 96 98 97\n"
	"a=recvonly\n"
	"a=rtpmap:96 PS/90000\n"
	"a=rtpmap:98 H264/90000\n"
	"a=rtpmap:97 MPEG4/90000\n"
	"y=0100000001\n",
	mediaContext.GetDeviceId().c_str(),
	mediaContext.GetRecvAddress().c_str(),
	mediaContext.GetRecvAddress().c_str(),
	mediaContext.GetRecvPort()
			);
	return str;
}
  • 信令交互成功之后,摄像头(媒体流发送者)会将视频数据以rtp的方式推送到指定的端口 (端口在上面的invite消息指定)流到媒体服务器
  • 媒体服务器(GB28181服务器)在指定的端口接收视频流
  • 媒体服务器(GB28181服务器)将视频流转发给流媒体接收者(比如ZLMediaKit)

在这里插入图片描述

具体流程如下:
在这里插入图片描述

视频流格式

GB28181要求传输的视频流格式为PS流,或者H264流,或者MP4格式。

可以用wireshark抓包,数据报类型是RTP的PS流

国标流媒体服务器其实就是负责将GB28181设备或者平台推送的PS流转成ES流,然后提供RTSP、RTMP、FLV、HLS等格式进?分发。

PS流和ES流的区别

IP数据报有?部和数据两部分组成的,?部的前?部
分是固定长度20字节,是所有IP数据报必须具有的。?部包括:总长度、标识、MF、DF、?偏移。
数字信号实际传送的是数据流,?般数据流包括以下三种:

  • ES流(Elementary Stream):也叫基本码流,包含视频、?频或数据的连续码流。
  • PES流(Packet Elementary Stream):也叫打包的基本码流,是将基本的码流ES流根据需要分成长度不等的数据
    包,并加上包头就形成了打包的基本码流PES流。
  • TS流:也叫传输流,是由固定长度为188字节的包组成,含有独?时基的?个或多个program, ?个program?可以包含多个视频、?频、和?字信息的ES流; 每个ES流会有不同的PID标?,为了可以分析这些ES流, TS有?些固定的PID?来间隔发送program和ES流信息的表格: PAT和PMT表。适?于误码较多的环境

ES 是直接从编码器出来的数据流,可以是编码过的视频数据流,?频数据流,或其他编码数据流的统称。 ES 流经过PES 打包器之后,被转换成 PES 包,再通过RTSP、RTMP、FLV、HLS格式分发出去,实现WEB、?机、PC、微信等多终端的播放

传播方式

GBT28181协议规定码流使用RTP包负载,推荐为PS流,也可以是ES流,对于媒体流的传输在原有UDP传输的基础中,增加了主动tcp和被动tcp的方式。

(1)UDP被动

  • 这个是普遍的传输方式。
    • GB28181流媒体服务器监听单个UDP端口,然后发送一个SIP信令(INVITE),其携带的SDP中包含了接收媒体的端口
    • 设备端收到信令后,解析该端口,然后设备主动通过UDP向流媒体服务端监听的那个端口上发送视频流

(2)TCP被动

  • 有两种,一种是主动,一种是被动
  • 对于主动: 设备端告知服务端自己的媒体流tcp端口,服务端主动去连接设备端的该端口,获取数据。。这种场景应用较少,可以忽略
  • 对于被动:流媒体服务器监听单个TCP端口,然后通过SIP信令(INVITE)告诉设备端口,设备主动向当前流媒体服务端发送视频流,基本等同于UDP流

实时视频

流程

前提:注册成功>>>>>>心跳成功>>>>>>设备目录查询>>>>>实时视频观看
在这里插入图片描述

服务端步骤

不管是TCP方式看,还是UDP方式看,其步骤都为:
(1)打开视频端口
(2)发送实时视频请求
(3)等待设备回复200OK
(4)发送ACK
(5)播放码流
(6)停止视频请求
(7)关闭视频端口
(8)普通等待

抓包分析

测试设备IP:192.168.0.107
服务端IP:192.168.0.60

实时视频建立_UDP

第零步:【服务端】打开视频端口

第一步:【服务端>>客户端】请求播放视频

INVITE sip:34020000001310000002@4401020049 SIP/2.0
Call-ID: helloVideo
CSeq: 1 INVITE
From: <sip:44010200492000000001@4401020049>;tag=bccedfd0111
To: <sip:34020000001110000001@4401020049>
Max-Forwards: 70
Contact: <sip:34020000001310000002@4401020049>
Via: SIP/2.0/UDP 192.168.0.107:5060;branch=z9hG4bKee5c5d98-bff9-4f3000002
Content-Type: application/sdp
Content-Length: 225

v=0
o=34020000001310000002 0 0 IN IP4 192.168.0.60
s=Play
c=IN IP4 192.168.0.60
t=0 0
m=video 6000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0100000001
f=

第二步:【客户端>>服务端】

先回复101
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.0.107:5060;branch=z9hG4bKee5c5d98-bff9-4f3000002
From: <sip:44010200492000000001@4401020049>;tag=bccedfd0111
To: <sip:34020000001110000001@4401020049>;tag=5f906952
Call-ID: helloVideo
CSeq: 1 INVITE
Server: Happytime Agent Ver 1.0
Content-Length: 0
再回复200
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.107:5060;branch=z9hG4bKee5c5d98-bff9-4f3000002
From: <sip:44010200492000000001@4401020049>;tag=bccedfd0111
To: <sip:34020000001110000001@4401020049>;tag=5f906952
Contact: <sip:34020000001110000001@4401020049>
Call-ID: helloVideo
CSeq: 1 INVITE
Max-Forwards: 70
Allow: ACK,BYE,CANCEL,INVITE,NOTIFY,REFER,UPDATE,INFO
Supported: timer
Session-Expires: 200;refresher=uac
Server: Happytime Agent Ver 1.0
Content-Type: application/sdp
Content-Length: 153

v=0
o=34020000001110000001 0 0 IN IP4 192.168.0.107
s=Play
c=IN IP4 192.168.0.107
t=0 0
m=video 19002 RTP/AVP 96
a=rtpmap:96 PS/90000
a=sendonly

第三步:【服务端>>客户端】回复ACK

ACK sip:34020000001310000002@4401020049 SIP/2.0
Call-ID: helloVideo
CSeq: 1 ACK
From: <sip:44010200492000000001@4401020049>;tag=bccedfd0111
To: <sip:34020000001110000001@4401020049>
Max-Forwards: 70
Via: SIP/2.0/UDP 192.168.0.107:5060;branch=z9hG4bKee5c5d98-00003
Content-Length: 0

第四步:播放码流

第五步:【服务端>>客户端】停止视频请求

BYE sip:34020000001310000002@4401020049 SIP/2.0
From: <sip:44010200492000000001@4401020049>;tag=bccedfd0111
To: sip:34020000001110000001@4401020049;tag=5f906952
CSeq: 2 BYE
Call-ID: helloVideo
Via: SIP/2.0/UDP 192.168.0.107:5060;branch=z9hG4bKee5c5d98-00004
Max-Forwards: 70
Content-Length: 0



第六步:【客户端】回应200

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.107:5060;branch=z9hG4bKee5c5d98-00004
From: <sip:44010200492000000001@4401020049>;tag=bccedfd0111
To: sip:34020000001110000001@4401020049;tag=5f906952
Call-ID: helloVideo
CSeq: 2 BYE
Server: Happytime Agent Ver 1.0
Content-Length: 0


第七步:【服务端】关闭视频端口

实时视频建立_TCP


基本要求

信令流程

实时视频流点播的信令流程有两种:

  • 客户端主动发起
  • 第三方呼叫控制

联网系统可选择其中一种或两种结合的实现方式,第三方呼叫控制的第三方控制者宜采用背靠背用户代理实现

客户端主动发起实时音视频点播流程

流程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

消息示范

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:18:51  更:2022-05-21 19:22:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:46:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码