【问题标题】:RTSP DESCRIBE on Axis Camera with libcurl v7.43.0 returns RTSP errorcode 400带有 libcurl v7.43.0 的 Axis 相机上的 RTSP DESCRIBE 返回 RTSP 错误代码 400
【发布时间】:2015-07-19 23:13:07
【问题描述】:

我收到一个 HTTP 错误 400,以响应下面显示的函数正在处理的以下 RTSP URL。

DESCRIBE rtsp://root:pass@192.168.1.47/axis-media/media.amp ?videocodec=h264/

我使用的 IP 摄像机是最新的 AXIS H264 摄像机。

我使用的libcurl版本是v7.43.0

bool CHttpClientCurl::Get() { // 初始化卷曲 CURLcode res = CURLE_OK; 如果(m_curl == NULL) { m_sError = L"CURL 句柄为 NULL。"; 返回假; }

m_sBuffer.clear();
// initialize this curl session
curl_easy_reset(m_curl);
char sUrl[8192];
wcstombs(sUrl, m_sUrl.c_str(), m_sUrl.length());
sUrl[m_sUrl.length()] = '\0';

curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
printf("    cURL V%s loaded\n", data->version);
if (m_curl != NULL) {
    curl_easy_setopt(m_curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(m_curl, CURLOPT_NOPROGRESS, 1L);
    curl_easy_setopt(m_curl, CURLOPT_PROTOCOLS, CURLPROTO_RTSP);
    res = curl_easy_setopt(m_curl, CURLOPT_URL, sUrl); 


    // request server options
    printf("\nRTSP: OPTIONS %s\n", sUrl);
    curl_easy_setopt(m_curl, CURLOPT_PROTOCOLS, CURLPROTO_RTSP);
    res = curl_easy_setopt(m_curl, CURLOPT_RTSP_STREAM_URI, sUrl); 
    curl_easy_setopt(m_curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_DESCRIBE); 
    curl_easy_setopt(m_curl, CURLOPT_RTSP_TRANSPORT, "RTP/AVP;unicast;client_port=64378-64379");
//  curl_easy_setopt(m_curl, CURLOPT_RTSP_SESSION_ID, "56789");
    res = curl_easy_perform(m_curl);
    int64_t nHttpCode = 0;
    curl_easy_getinfo(m_curl, CURLINFO_RESPONSE_CODE, &nHttpCode);
    m_nStatusCode = nHttpCode;
    if (res != CURLE_OK)
    {
        std::wstringstream ss;
        ss << curl_easy_strerror(res);
        m_sError = L"Error occurred - " + std::wstring(ss.str());
        return false;
    }
    else if (nHttpCode != 200)
    {
        SetErrorString(nHttpCode);
        return false;
    }
}
return true;

}

如果 URL 或 C++ 函数中有错误,有人可以告诉我吗?

非常感谢。

【问题讨论】:

  • 使用什么 RTSP URL 方案连接到安讯士网络摄像机?这在安讯士摄像机的文档中有所描述。不过,您确实需要寻找它。下面的示例使用 vlc 作为应用程序来远程查看您的网络摄像机。较旧的 Axis(例如:207、210)网络摄像机对 H264 流使用以下方案(将 mpeg4 替换为 mpeg2 以更改视频格式)。 vlc rtsp://myaxiscamera/mpeg4/media.amp --rtsp-http 较新的 Axis(例如:Q 1755/Q 1755-E)网络摄像机使用此方案:vlc rtsp://myaxiscamera/axis-media/media.amp --rtsp-http
  • 请阅读以下 URL:了解每个 Axis 相机型号的 RTSP 语法说明:soleratec.com/support/rtsp/rtsp_listing?camera_company=AXIS
  • 我有一个答案,我会在 4 小时后发布。

标签: c++ libcurl rtsp


【解决方案1】:

解决此问题的方法是首先在 rtsp 字符串中提供用户凭据,然后连续两次发出 RTSP DESCRIBE。如果用户凭据不正确或丢失,第一个 RTSP DESCRIBE 请求将导致 HTTP 401 错误代码。第二个 DESCRIBE 请求将产生 HTTP 200 OK 代码。在第二个 RTSP DESCRIBE 返回 HTTP 200 OK 后,您可以发出 RTSP SETUP 请求,然后发出 RTSP PLAY 请求,该请求应返回 HTTP 200 并创建 RTSP 流。

【讨论】:

  • @Roman R.,请问如何在具有双 h264 和 mpeg4 流硬件支持的 Axis 相机上使用 RTSP 来流式传输 MPEG4?谢谢。
  • Page 17 here:DESCRIBE rtsp://myserver/.../media.amp?videocodec=h264&amp;resolution=640x480。我想这就是你要找的。​​span>
  • @RomanR.,感谢您回复我的问题。请问“第 17 页”的完整 URL 以及 full rtsp DESCRIBE RTSP URL 是什么?谢谢,
  • @Roman R.,感谢您回复我的问题。请问“此处第 17 页”的完整 URL 以及完整的 rtsp DESCRIBE RTSP URL 是什么?谢谢,
  • @Roman R,我相信您 8 分钟前的评论中有印刷错误。我希望了解如何使用 RTSP 协议通过 Axis 相机流式传输 ** MPEG4 ** 而不是 H264。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
相关资源
最近更新 更多