通过java取海康威视摄像头RTSP视频流

1.配置录像机web页面

这里明确端口号

2.java代码
 

// 业务代码中调用
public String getRTSPUrl(String username, String password, int channel) {
    // 测试阶段写死设备 IP
    String deviceIP = "122.226.147.54";

    // 初始化 SDK
    boolean initResult = hCNetSDK.NET_DVR_Init();
    if (!initResult) {
        System.out.println("SDK 初始化失败");
        return null;
    }


    // 登录设备(使用测试 IP)
    Login_V40(deviceIP, (short)8001, username, password);
    if (lUserID >= 0) {
        // 可以添加检查设备状态的逻辑
        // 例如,尝试获取设备的一些基本信息,判断设备是否正常响应
    } else {
        System.out.println("设备未登录");
    }
    try {
        // 获取 RTSP 配置
        HCNetSDK.NET_DVR_RTSPCFG rtspConfig = new HCNetSDK.NET_DVR_RTSPCFG();
        rtspConfig.dwSize = rtspConfig.size();

        boolean result = hCNetSDK.NET_DVR_GetRtspConfig(
                lUserID,
                HCNetSDK.NET_DVR_GET_RTSP_CONFIG,
                rtspConfig,
                rtspConfig.dwSize
        );

        //此录像机被硬件改了,默认端口554是内网。555是公网。
        if (result) {
            int portNum = rtspConfig.wPort;
            System.out.println("【调试】获取的 RTSP 端口: " + portNum);
            return String.format("rtsp://%s:%s@%s:%d/Streaming/Channels/%d",
                    username, password, deviceIP, 555, channel);
        } else {
            int errorCode = hCNetSDK.NET_DVR_GetLastError();
            System.out.println("【错误】获取 RTSP 配置失败,错误码: " + errorCode);

            // 临时调试:强制使用 554 端口
            System.out.println("【调试】使用默认端口 554");
            return String.format("rtsp://%s:%s@%s:554/Streaming/Channels/%d",
                    username, password, deviceIP, channel);
        }
    } finally {
        // 释放资源
        hCNetSDK.NET_DVR_Logout(lUserID);
        hCNetSDK.NET_DVR_Cleanup();
    }
}

这只是一个测试方法,通过main调用。

文章中登录方法,初始化方法,这些就不一一贴图了,在HCNetSDK类中有

生成的RTSP连接大概如下:

之前本人一直用通道33,因为录像机的第一个摄像头通道我们是33,所以一直无法使用,结果问了海康的技术支持才发现,主码流是101,次码流是102,其实前两位,10代表通道,摄像头插在录像机的第一个口,就是通道1,第二个口,这里就是201。(海康的web页面没有注明,任何地方也没写,这点很坑)
 

3.VLC进行测试

4.通道号正确就可以访问了

5.有取RTSP码流方面的问题,可以直接访问海康提供的网站

网页渠道

### 配置海康威视摄像头RTSP流的方法 #### 1. RTSP协议基础 实时流传输协议 (Real Time Streaming Protocol, RTSP) 是一种网络控制协议,用于娱乐和通信系统的交互式媒体检索。它允许客户端远程控制位于服务器上的多媒体文件的播放过程[^1]。 #### 2. 海康威视RTSP地址格式 对于海康威视设备,其RTSP地址通常遵循特定的格式结构。以下是常见的几种形式: - **主码流**: `rtsp://用户名:密码@IP地址:端口号/Streaming/Channels/<通道号>01` 示例:`rtsp://admin:hik12345@192.168.1.64:554/Streaming/Channels/101` - **子码流**: 子码流适用于低带宽场景下的视频流传输。 示例:`rtsp://admin:hik12345@192.168.1.64:554/Streaming/Channels/102` - **多播模式**: 如果需要启用多播功能,则可以在URL中指定传输方式为单播或多播。 示例:`rtsp://admin:hik12345@192.168.1.64:554/Streaming/Channels/101?transportmode=multicast` 上述参数中的 `<通道号>` 表示具体的摄像机通道编号,例如第1通道为主码流则写为 `101` 或者子码流为 `102`[^3]。 #### 3. 软件验证RTSP地址有效性 为了确认所编写的RTSP地址是否有效,可以采用多种工具进行测试: - **VLC Media Player** VLC是一款开源跨平台多媒体播放器,支持大多数音频与视频解码标准及其协议。通过打开菜单栏中的“Media -> Open Network Stream”,输入完整的RTSP URL 即可尝试连接并查看视频流。 - **PotPlayer** PotPlayer同样能够解析RTSP链接,在界面顶部点击右键选择 “Open URL” 后填入相应路径完成操作。 - **Opencv库编程检测** 利用Python结合计算机视觉库OpenCV编写脚本自动抓图像帧来判断连通状态。下面给出一段简单的代码片段作为示范: ```python import cv2 def test_rtsp(rtsp_url): cap = cv2.VideoCapture(rtsp_url) if not cap.isOpened(): print("无法打开RTSP流") return False ret, frame = cap.read() if ret: print("成功读一帧数据") # 可在此处保存图片或者进一步处理frame变量代表的一张图片 cv2.imwrite('test_frame.jpg', frame) cap.release() if __name__ == "__main__": url = "rtsp://example_username:password@example_ip:port/path" test_rtsp(url) ``` 此函数接收一个字符串类型的RTSP地址作为参数,并返回布尔值指示能否正常访问资源。 #### 4. 常见错误排查指南 当遇到无法拉RTSP流的情况时,可以从以下几个方面入手分析原因: - 检查防火墙设置是否阻止了外部请求到达目标主机; - 确认所提供的认证凭证(即用户名和密码)无误; - 核实实际使用的端口号码,默认情况下应该是554而非其他数值; - 对于某些特殊型号可能还需要额外配置DHCP服务或者其他高级选项才能正常使用[^2]; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值