视频监控平台-GB28181-语音对讲功能

视频监控平台-GB28181-语⾳对讲功能
视频监控平台-GB28181-2016语⾳对讲功能
很多⼈在问我,语⾳对讲是怎么流程, 实现了怎么去测试,语⾳对讲是在2014版本提出来的,我这⾥详细写⼀遍国标28181-2016语⾳对讲的功能介绍。(如需交流可联系QQ:123011785)
提前先把GB28181检测需要注意的事项说⼀下:
1、语⾳对讲其实主要的是⾳频流的输⼊输出, 输⼊设备类型是136,输出设备类型是137
2、⽬前检测的时候,海康摄像机是定制的检测版本有固定的137类型id,⼀般海康摄像机是没有配置⾳频输出通道的,需要⾃⼰通过SDK 模拟⼀个⾳频输出设备或则让海康提供 28181检测的固件版本。
3、检测时候需要⽤笔记本电脑模拟⼀个136⾳频输⼊的设备,⼀般和客户端绑定⼀起(或则后台服务器配置相应的id和客户端绑定⼀起)
4、⾳频输⼊源⼀般是采⽤笔记本采集的⾳频信号,⾳频采集代码后⾯的博客提供。
不锈钢液压管接头下⾯看⼀下语⾳对讲的流程:
其中, 信令 1 、
2 、
3 、
4 为语⾳⼴播通知、 语⾳⼴播应答消息流程; 信令
5 、 1 2 、 1 3 、 1 4 、 1 5 、 1
6 为 S I P 服务
器接收到客户端的呼叫请求通过 B 2 B UA 代理⽅式建⽴语⾳流接收者与媒体服务器之间的媒体流信令
过程, 信令 6~1 1 为 S I P 服务器通过三⽅呼叫控制建⽴媒体服务器与语⾳流发送者之间的媒体流信令
过程, 信令 1 7~2 0 为 S I P 服务器断开语⾳流接收者与媒体服务器之间的媒体流信令过程, 信令 2 1~2 4
6 4pvc再生颗粒
G B / T2 8 1 8 1 — 2 0 1 6
为 S I P 服务器断开媒体服务器与语⾳流发送者之间的媒体流信令过程。
命令流程描述如下:
a ) 1 : S I P 服务器向语⾳流接收者发送语⾳⼴播通知消息, 消息中通过 T o 头域标明作为⽬的地址
的语⾳流接收者 I D , 消息采⽤ M e s s a g e ⽅法携带。
b ) 2 : 语⾳流接收者收到语⾳⼴播通知消息后, 向 S I P 服务器发送 2 0 0OK 响应。
c ) 3 : 语⾳流接收者向 S I P 服务器发送语⾳⼴播应答消息, 消息中通过 T o 头域标明作为⽬的地
址的 S I P 服务器 I D , 消息采⽤ M e s s a g e ⽅法携带。
d ) 4 : S I P 服务器收到语⾳⼴播应答消息后, 向语⾳流接收者发送 2 0 0OK 响应。
e ) 5 : 语⾳流接收者向 S I P 服务器发送 I n v i t e 消息, 消息中通过 T o 头域标明作为⽬的地址的语⾳
肖秀丹流发送者 I D , 消息头域中携带 S u b j e c t 字段, 表明请求的语⾳流发送者 I D 、 发送⽅媒体流序列新型燃气炉
号、 语⾳流接收者 I D 、 接收⽅媒体流序列号等参数, S D P 消息体中 s 字段为“ P l a y ” 代表实时点 播, m 字段中媒体参数标识为“
a u d i o ” 表⽰请求语⾳媒体流。
f ) 6 : S I P 服务器收到 I n v i t e 请求后, 通过三⽅呼叫控制建⽴媒体服务器和语⾳流发送者之间的
媒体连接。向媒体服务器发送 I n v i t e 消息, 此消息不携带 S D P 消息体。
g ) 7 : 媒体服务器收到 S I P 服务器的 I n v i t e 请求后, 回复 2 0 0OK 响应, 携带 S D P 消息体, 消息体 中描述了媒体服务器接收媒体流的 I P 、 端⼝、 媒体格式等内容。
h ) 8 : S I P 服务器收到媒体服务器返回的 2 0 0OK 响应后, 向语⾳流发送者发送 I n v i t e 请求, 消息
中通过 T o 头域标明作为⽬的地址的语⾳流发送者 I D , 消息头域中携带 S u b j e c t 字段, 表明请
求的语⾳流发送者 I D 、 发送⽅媒体流序列号、 语⾳流接收者 I D 、 接收⽅媒体流序列号等参数,
请求中携带消息 7 中媒体服务器回复的 2 0 0OK 响应消息体, s 字段为“ P l a y ” 代表实时点播,
m 字段中媒体参数标识为“ a u d i o ” 表⽰请求语⾳媒体流, 增加 y 字段描述 S S R C 值, f 字段描述
媒体参数。
i ) 9 : 语⾳流发送者收到 S I P 服务器的 I n v i t e 请求后, 回复 2 0 0OK 响应, 携带 S D P 消息体, 消息 体中描述了媒体流发送者发送媒体流的 I P 、 端⼝、 媒体格式、 S S R C 字段等内容, s 字段为
P l a y ” 代表实时点播,
m 字段中媒体参数标识为“ a u d i o ” 表⽰请求语⾳媒体流。
j ) 1 0 : S I P 服务器收到语⾳流发送者返回的 2 0 0OK 响应后, 向媒体服务器发送 A C K 请求, 请求
中携带消息 9 中语⾳流发送者回复的 2 0 0OK 响应消息体, 完成与媒体服务器的 I n v i t e 会话
建⽴过程。
k ) 1 1 : S I P 服务器收到语⾳流发送者返回的 2 0 0OK 响应后, 向语⾳流发送者发送 A C K 请求, 请
求中不携带消息体, 完成与语⾳流发送者的 I n v i t e 会话建⽴过程。
l ) 1 2 : 完成三⽅呼叫控制后, S I P 服务器通过 B 2 B UA 代理⽅式建⽴语⾳流接收者和媒体服务器
之间的媒体连接。在消息 5 中增加 S S R C 值, 转发给媒体服务器。
m ) 1 3 : 媒体服务器收到 I n v i t e 请求, 回复 2 0 0OK 响应, 携带 S D P 消息体, 消息体中描述了媒体服 务器发送媒体流的 I P 、 端⼝、 媒体格式、 S S R C 值等内容,
s 字段为“ P l a y ” 代表实时点播, m 字段
中媒体参数标识为“
a u d i o ” 表⽰请求语⾳媒体流。
n ) 1 4 : S I P 服务器将消息 1 3 转发给语⾳流接收者。
o ) 1 5 : 语⾳流接收者收到 2 0 0OK 响应后, 回复 A C K 消息, 完成与 S I P 服务器的 I n v i t e 会话建⽴ 过程。
p ) 1 6 : S I P 服务器将消息 1 5 转发给媒体服务器, 完成与媒体服务器的 I n v i t e 会话建⽴过程。
q ) 1 7 : S I P 服务器向语⾳流接收者发送 B Y E 消息, 断开消息 5 、 1 4 、 1 5 建⽴的 I n v i t e 会话。 r ) 1 8 : 语⾳流接收者收到 B Y E 消息后回复 2 0 0OK 响应, 会话断开。
s ) 1 9 : S I P 服务器向媒体服务器发送 B Y E 消息, 断开消息 1 2 、 1 3 、 1 6 建⽴的同媒体服务器的 I n v i t e 会话。
上⾯是28181协议⾥⾯规定的流程,直接照搬过来,不管怎么实现语⾳对讲也要根据流程⾛。
下⾯我把抓包详情粘贴下:
MESSAGE sip:34020000001370000001@192.168.1.81:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.93:5060;rport;branch=z9hG4bK-3d09000-1047e076-A8X5JYC1
From: <sip:64000000002000000001@192.168.1.93:5060>;tag=CN2Ei3Vu
To: <sip:34020000001370000001@192.168.1.81:5060>
Call-ID: 5c0d74ae-4352-df11-aa52-56a46c795625@192.168.1.93
CSeq: 55 MESSAGE
Contact: <sip:192.168.1.93:5060>
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: iVMS 1.0
Content-Length:  173
<?xml version="1.0"?>
<Notify>
<CmdType>Broadcast</CmdType>
<SN>20</SN>
<SourceID>64000000001360000001</SourceID>
<SourceID>64000000001360000001</SourceID>
<TargetID>34020000001370000001</TargetID>
</Notify>
SIP/2.0 200 OK
To: <sip:34020000001370000001@192.168.1.81:5060>;tag=75600014_53173353_c376baa4-b5f9-4f2a-a739-653dc3299ae1 Via: SIP/2.0/UDP 192.168.1.93:5060;rport=5060;branch=z9hG4bK-3d09000-1047e076-A8X5JYC1;received=192.168.1.93 CSeq: 55 MESSAGE
Call-ID: 5c0d74ae-4352-df11-aa52-56a46c795625@192.168.1.93
From: <sip:64000000002000000001@192.168.1.93:5060>;tag=CN2Ei3Vu
Content-Length: 0
MESSAGE sip:64000000002000000001@6400000000 SIP/2.0
Call-ID: 2cf6a25ea9b4f63ca255f60faefb584d@0.0.0.0
CSeq: 1 MESSAGE
From: <sip:34020000002000000001@3402000000>;tag=78679367_53173353_5e822bd3-744e-4d50-a7ae-3dcb31308ad5 To: <sip:64000000002000000001@6400000000>
Max-Forwards: 70
Content-Encoding: GB2312
Content-Type: Application/MANSCDP+xml
Route: <sip:64000000002000000001@192.168.1.93:5060;lr>
Via: SIP/2.0/UDP 192.168.1.81:5060;branch=z9hG4bK5e822bd3-744e-4d50-a7ae-3dcb31308ad5_53173353_28675579067886 Content-Length: 147
<?xml version="1.0"?>
<Response>
<CmdType>Broadcast</CmdType>
<SN>20</SN>
<DeviceID>34020000001370000001</DeviceID>
<Result>OK</Result>
</Response>SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.81:5060;branch=z9hG4bK5e822bd3-744e-4d50-a7ae-3dcb31308ad5_53173353_28675579067886 From: <sip:34020000002000000001@3402000000>;tag=78679367_53173353_5e822bd3-744e-4d50-a7ae-3dcb31308ad5 To: <sip:64000000002000000001@6400000000>;tag=nVa5oJ2n
Call-ID: 2cf6a25ea9b4f63ca255f60faefb584d@0.0.0.0
CSeq: 1 MESSAGE
Contact: <sip:64000000002000000001@192.168.1.93:5060>
Content-Length: 0
INVITE sip:64000000001360000001@6400000000 SIP/2.0
Call-ID: a0ce1d2417f6cb64571120b90c2243c1@0.0.0.0
CSeq: 1 INVITE
From: <sip:34020000002000000001@3402000000>;tag=84133916_53173353_4063c926-989f-4a9a-af9c-867f8219c6ab
To: <sip:64000000001360000001@6400000000>
Max-Forwards: 70
Contact: "34020000002000000001" <sip:192.168.1.81:5060>
Subject: 64000000001360000001:0-4-0,34020000002000000001:1
Content-Type: application/sdp
Route: <sip:64000000001360000001@192.168.1.93:5060;lr>
Via: SIP/2.0/UDP 192.168.1.81:5060;branch=z9hG4bK4063c926-989f-4a9a-af9c-867f8219c6ab_53173353_28675585450209 Content-Length: 171
v=0
o=64010000002020000001 0 0 IN IP4 192.168.1.81
s=Play
c=IN IP4 192.168.1.81
t=0 0
m=audio 8000 RTP/AVP 96
a=recvonly
a=rtpmap:96 PS/90000
y=010*******
f=v/a/1/8/1
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.1.81:5060;branch=z9hG4bK4063c926-989f-4a9a-af9c-867f8219c6ab_53173353_28675585450209 From: <sip:34020000002000000001@3402000000>;tag=84133916_53173353_4063c926-989f-4a9a-af9c-
867f8219c6ab
To: <sip:64000000001360000001@6400000000>
Call-ID: a0ce1d2417f6cb64571120b90c2243c1@0.0.0.0
Call-ID: a0ce1d2417f6cb64571120b90c2243c1@0.0.0.0
CSeq: 1 INVITE
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.81:5060;branch=z9hG4bK4063c926-989f-4a9a-af9c-867f8219c6ab_53173353_28675585450209 Record-Route: <sip:64000000002000000001@192.168.1.93:5060;lr>
From: <sip:34020000002000000001@3402000000>;tag=84133916_53173353_4063c926-989f-4a9a-af9c-867f8219c6ab To: <sip:64000000001360000001@6400000000>;tag=Wn1J54GK
最佳位置 PO
Call-ID: a0ce1d2417f6cb64571120b90c2243c1@0.0.0.0
CSeq: 1 INVITE
Contact: <sip:64000000001360000001@192.168.1.93:5060>
Content-Type: application/sdp
Content-Length:  180
v=0
o=64000000001360000001 0 0 IN IP4 192.168.1.93
s=Play
c=IN IP4 192.168.1.93
t=0 0
m=audio 20104 RTP/AVP 8
a=sendonly
a=rtpmap:8 PS/90000
y=010*******
f=v/a/1/8/1
ACK sip:64000000001360000001@192.168.1.93:5060 SIP/2.0
Call-ID: a0ce1d2417f6cb64571120b90c2243c1@0.0.0.0
CSeq: 1 ACK
From: <sip:34020000002000000001@3402000000>;tag=84133916_53173353_4063c926-989f-4a9a-af9c-867f8219c6ab To: <sip:64000000001360000001@6400000000>;tag=Wn1J54GK
Max-Forwards: 70
Route: <sip:64000000002000000001@192.168.1.93:5060;lr>
Via: SIP/2.0/UDP 192.168.1.81:5060;branch=z9hG4bK4063c926-989f-4a9a-af9c-867f8219c6ab_53173353_28675725931057 Content-Length: 0
流程抓包截图:
⾳频流采⽤的G711格式:
下⾯粘贴⾳频采集代码的⽚段:
#pragma once
#include <mmsystem.h>
#include <dsound.h>
#include <memory.h>
#include <list>
#include <process.h>
#include "WaveHeader.h"
#include <math.h>
#include "SoundRecord.h"
#include "g711.h"
class CDSRecord : public CSoundRecord
{
public:
在线水分检测
CDSRecord(ISoundNotify* pNotify);
~CDSRecord(void);
LPDIRECTSOUNDCAPTURE      m_pDSCapture;
LPDIRECTSOUNDCAPTUREBUFFER m_pDSBCapture;    LPDIRECTSOUNDNOTIFY        m_pDSNotify;
HINSTANCE                  m_hInst;
bool                      m_bRecording;
WAVEFORMATEX              m_wfxInput;
DSBPOSITIONNOTIFY          m_aPosNotify[4];
HANDLE                    m_hNotificationEvent;
HANDLE                    m_hStopThreadEvent;
BOOL                      m_abInputFormatSupported[20];    DWORD                      m_dwCaptureBufferSize;
DWORD                      m_dwNextCaptureOffset;
DWORD                      m_dwNotifySize;
HANDLE                    m_hThread;
WAVEFORMATEX WaveFormat;
float bSampleReal[1024];
float bSampleImg[1024];
bool InitDS(void);
bool SaveDataToFile(LPCTSTR m_pathname);
bool ReadCaptureBuffer(void);
bool StarRecord(void);
bool StopRecord(void);
std::list<DWORD> SizeList;
std::list<void*> BufList;
CWaveHeader WaveHeader;
bool Sampling(void);
void FFT(float xreal [], float ximag [], int n);
//通知接⼝
ISoundNotify* m_pISoundNotify;
// 销毁
void Destroy(void);
// 开始
bool Start(void);
// 结束
bool Stop(void);
protected:
void bitrp(float xreal [], float ximag [], int n);
void IFFT (float xreal [], float ximag [], int n);
};
#include "StdAfx.h"

本文发布于:2024-09-22 06:50:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/257138.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:媒体   消息   服务器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议