In the Chinese market, cameras from brands such as Hikvision, Dahua, and Yushi are widely used in video stream capture scenarios for industrial software. There are differences in the RTSP (Real Time Streaming Protocol) address format among devices of different brands and models. Here are 16 common device streaming standard addresses and corresponding code examples for accurately capturing video streams in industrial software.
#ifndef AVDEVICEURL_H
#define AVDEVICEURL_H
struct DeviceData;
class AVDeviceURL
{
public:
AVDeviceURL(DeviceData& data);
private:
void _handel(DeviceData& data);
//海康微视
void _haikangweishi(DeviceData& data);
//大华
void _dahua(DeviceData& data);
//雄迈/巨峰
void _xiongmai_jufeng(DeviceData& data);
//天视通
void _tianshitong(DeviceData& data);
//中维/尚维
void _zhongwei_shangwei(DeviceData& data);
//九安
void _jiuan(DeviceData& data);
//技威/YOOSEE
void _jiwei_yoosee(DeviceData& data);
//V380
void _v380(DeviceData& data);
//宇视
void _yushi(DeviceData& data);
//天地伟业
void _tiandeweiye(DeviceData& data);
//巨龙/JVT
void _julong_jvt(DeviceData& data);
//华为
void _huawei(DeviceData& data);
};
#endif // AVDEVICEURL_H
#include "av_device_url.h"
#include "DeviceTableModel.h"
AVDeviceURL::AVDeviceURL(DeviceData& data)
{
if(0 == data.model.compare("通用"))
_handel(data);
}
void AVDeviceURL::_handel(DeviceData &data)
{
if(0 == data.firm.compare("海康"))
{
_haikangweishi(data);
}
else if(0 == data.firm.compare("大华"))
{
_dahua(data);
}
else if(0 == data.firm.compare("雄迈") || 0 == data.firm.compare("巨峰") )
{
_xiongmai_jufeng(data);
}
else if(0 == data.firm.compare("天视通"))
{
_tianshitong(data);
}
else if(0 == data.firm.compare("中维") || 0 == data.firm.compare("尚维") )
{
_zhongwei_shangwei(data);
}
else if(0 == data.firm.compare("九安"))
{
_jiuan(data);
}
else if(0 == data.firm.compare("技威") || 0 == data.firm.compare("YOOSEE") )
{
_jiwei_yoosee(data);
}
else if(0 == data.firm.compare("V380"))
{
_v380(data);
}
else if(0 == data.firm.compare("宇视"))
{
_yushi(data);
}
else if(0 == data.firm.compare("天地伟业"))
{
_tiandeweiye(data);
}
else if(0 == data.firm.compare("巨龙") || 0 == data.firm.compare("JVT") )
{
_julong_jvt(data);
}
else if(0 == data.firm.compare("华为"))
{
_huawei(data);
}
}
void AVDeviceURL::_haikangweishi(DeviceData &data)
{
// 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设
// 端口:“HTTP 端口”(默认为 80)、“RTSP 端口”(默认为 554)、“HTTPS 端 口”(默认 443)和“服务端口”(默认 8000),ONVIF端口 80。
// RTSP地址:rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
// 说明:
// username: 用户名。例如admin。
// password: 密码。例如12345。
// ip: 为设备IP。例如 192.0.0.64。
// port: 端口号默认为554,若为默认可不填写。
// codec:有h264、MPEG-4、mpeg4这几种。
// channel: 通道号,起始为1。例如通道1,则为ch1。
// subtype: 码流类型,主码流为main,辅码流为sub。
// 例如,请求海康摄像机通道1的主码流,Url如下
// 主码流:
// rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream
// 子码流:
// rtsp://admin:12345@192.0.0.64/mpeg4/ch1/sub/av_stream
QString codec_vec[4] = {"h264","h264","MPEG-4","mpeg4"};
QString subtype_vec[2] = {"main","sub"};
data.url = "rtsp://" + data.username + ":" + data.password + "@" + data.host + ":" + QString::number(data.port) + "/" \
+ codec_vec[data.codec%4] + "/ch" + QString::number(data.channel) + "/" + subtype_vec[data.subtype%2] + "/av_stream";
}
void AVDeviceURL::_dahua(DeviceData &data)
{
// 默认IP地址:192.168.1.108 用户名/密码:admin/admin
// 端口:TCP 端口 37777/UDP 端口 37778/http 端口 80/RTSP 端口号默认为 554/HTTPs 443/ONVIF 功能默认为关闭,端口80
// RTSP地址:rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
// 说明:
// username: 用户名。例如admin。
// password: 密码。例如admin。
// ip: 为设备IP。例如 10.7.8.122。
// port: 端口号默认为554,若为默认可不填写。
// channel: 通道号,起始为1。例如通道2,则为channel=2。
// subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。
// 例如,请求某设备的通道2的辅码流,Url如下
// rtsp://admin:admin@10.12.4.84:554/cam/realmonitor?channel=2&subtype=1
data.url = "rtsp://" + data.username + ":" + data.password + "@" + data.host + ":" + QString::number(data.port)\
+ "/cam/realmonitor?channel=" + QString::number(data.channel) + "&subtype=" + QString::number(data.subtype);
}
void AVDeviceURL::_xiongmai_jufeng(DeviceData &data)
{
// 默认IP地址:192.168.1.10 用户名admin 密码空
// 端口:TCP端口:34567 和 HTTP端口:80,onvif端口是8899
// RTSP地址:rtsp://10.6.3.57:554/user=admin&password=&channel=1&stream=0.sdp?
// 10.6.3.57这个是被连接的设备的IP
// 554这个是RTSP服务的端口号,可以在设备的网络服务里面更改
// user=admin这个是设备的登录用户名
// password= 密码空
// channel=1 第一通道
// stream=0.sdp?主码流
// stream=1.sdp?副码流
// 图片抓拍地址:http://ip/webcapture.jpg?command=snap&channel=1
data.url = "rtsp://"+ data.host + ":" + QString::number(data.port) + "/user=" + data.username + "&password=" + data.password\
+ "&channel=" + QString::number(data.channel) + "&stream=" + QString::number(data.subtype) + ".sdp?";
}
void AVDeviceURL::_tianshitong(DeviceData &data)
{
// 默认IP地址:192.168.0.123 用户名admin 密码123456
// 端口:http端口80 数据端口8091 RTSP端口554 ONVIF端口 80
// RTSP地址:主码流地址:rtsp://192.168.0.123:554/mpeg4
// 子码流地址:rtsp://192.168.0.123:554/mpeg4cif
// 需要入密码的地址: 主码流 rtsp://admin:123456@192.168.0.123:554/mpeg4
// 子码流 rtsp://admin:123456@192.168.0.123:554/mpeg4cif
// 图片抓拍地址:http://ip/snapshot.cgi
if(data.username.length() > 0 && data.password.length() > 0)
data.url = "rtsp://" + data.username + ":" + data.password + "@" + data.host + ":" + QString::number(data.port) + "/mpeg4";
else
data.url = "rtsp://" + data.host + ":" + QString::number(data.port) + "/mpeg4";
if(data.subtype != 0) data.url += "cif";
}
void AVDeviceURL::_zhongwei_shangwei(DeviceData &data)
{
// 默认IP地址:DHCP 默认用户名admin 默认密码 空
// RTSP地址:rtsp://0.0.0.0:8554/live1.264(次码流)
// rtsp://0.0.0.0:8554/live0.264 (主码流)
data.url = "rtsp://" + data.host + ":" + QString::number(data.port) + "/live" + QString::number(data.subtype) + ".264";
}
void AVDeviceURL::_jiuan(DeviceData &data)
{
//RTSP地址:rtsp://IP:port(website port)/ch0_0.264(主码流)
//rtsp://IP:port(website port)/ch0_1.264(子码流)
data.url = "rtsp://" + data.host + ":" + QString::number(data.port) + "/ch" + QString::number(data.channel) + "_"\
+ QString::number(data.subtype) + ".264";
}
void AVDeviceURL::_jiwei_yoosee(DeviceData &data)
{
//技威/YOOSEE
//默认IP地址:DHCP 用户名admin 密码123
//RTSP地址:主码流:rtsp://IPadr:554/onvif1
//次码流:rtsp://IPadr:554/onvif2
//onvif端口是5000
//设备发现的端口是3702
data.url = "rtsp://" + data.host + ":" + QString::number(data.port) + "/onvif" + QString::number(data.subtype + 1);
}
void AVDeviceURL::_v380(DeviceData &data)
{
// 默认IP地址:DHCP 用户名admin 密码空/admin
// onvif端口8899
// RTSP地址:主码流rtsp://ip//live/ch00_1
// 子码流rtsp://ip//live/ch00_0
data.url = "rtsp://" + data.host + "//live/ch00" + "_" + QString::number((data.subtype + 1)%2);
}
void AVDeviceURL::_yushi(DeviceData &data)
{
// 默认IP地址: 192.168.0.13/DHCP 默认用户名 admin 和默认密码 123456
// 端口:HTTP 80/RTSP 554/HTTPS 110(443)/onvif端口 80
// RTSP地址:rtsp://用户名:密码@ip:端口号/video123 123对应3个码流
data.url = "rtsp://" + data.username + ":" + data.password + "@" + data.host + ":" + QString::number(data.port)\
+ "/video" + QString::number(data.subtype + 1);
}
void AVDeviceURL::_tiandeweiye(DeviceData &data)
{
// 默认IP地址:192.168.1.2 用户名“Admin”、密码“1111”
// onvif端口号“8080”
// RTSP地址:rtsp://192.168.1.2
data.url = "rtsp://" + data.host;
}
void AVDeviceURL::_julong_jvt(DeviceData &data)
{
// 默认IP地址:192.168.1.88 默认用户名 admin 默认密码admin
// RTSP地址:
// 主码流地址:rtsp://IP地址/av0_0
// 次码流地址:rtsp://IP地址/av0_1
// onvif端口 2000
// 图片抓拍地址:http://ip/capture/webCapture.jpg?channel=1&FTpsend=0&checkinfo=0
// (http://ip/cgi-bin/images_cgi?channel=1&user=admin&pwd=admin)
data.url = "rtsp://" + data.host + "/av0" + "_" + QString::number(data.subtype);
}
void AVDeviceURL::_huawei(DeviceData &data)
{
//rtsp://[username]:[password]@[ip]:[port]/LiveMedia/[channel]/Media1
//说明:
//username: 用户名。例如admin。
//password: 密码。例如admin123。
//ip: 为设备IP。例如192.168.1.110。
//port: 端口号默认为554,若为默认可不填写。
//channel: 通道号,起始为1。例如通道1,则为ch1。
//Media:1代表主码流、2辅码流
//如:rtsp://admin:admin123@192.168.1.110/LiveMedia/ch1/Media2
data.url = "rtsp://" + data.username + ":" + data.password + "@" + data.host + ":" + QString::number(data.port) + "/LiveMedia" \
+ "/ch" + QString::number(data.channel) + "/Media" + QString::number(data.subtype + 1);
}
Top comments (0)