实现视频流

PtzNew
Matthew 3 months ago
parent ccc0e0e334
commit c8966009b8

@ -1936,13 +1936,12 @@ bool CPhoneDevice::StartPushStreaming(IDevice::PHOTO_INFO& photoInfo, const std:
return false; return false;
} }
StreamForwarder* forwarder = new StreamForwarder(); RtspForwarder* forwarder = new RtspForwarder(streamingUrl, url);
// Initialize with RTSP input and RTMP output bool res = false;
if (!forwarder->initialize(streamingUrl, url)) { if (vendorCtrl->HasAuthOnStreaming())
std::cerr << "Failed to initialize stream forwarder" << std::endl; {
delete forwarder; forwarder->setAuth(photoInfo.userName, photoInfo.password);
return -1;
} }
STREAMING_CONTEXT ctx; STREAMING_CONTEXT ctx;
@ -1960,8 +1959,16 @@ bool CPhoneDevice::StartPushStreaming(IDevice::PHOTO_INFO& photoInfo, const std:
#endif #endif
// Start forwarding // Start forwarding
forwarder->start(); res = forwarder->start();
#if 0
// Initialize with RTSP input and RTMP output
if (!res)
{
XYLOG(XYLOG_SEVERITY_ERROR, "TP: Failed to open stream: %s (%u/%02X) PHOTOID=%u", streamingUrl.c_str(), (unsigned int)photoInfo.channel, (unsigned int)photoInfo.preset, photoInfo.photoId);
delete forwarder;
return -1;
}
#endif
// Wait for user input to stop // Wait for user input to stop
// std::cout << "Press Enter to stop streaming..." << std::endl; // std::cout << "Press Enter to stop streaming..." << std::endl;
// std::cin.get(); // std::cin.get();
@ -2284,6 +2291,7 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector<
std::thread t([localPhotoInfo, path, pThis, osds, powerCtrlPtr]() mutable std::thread t([localPhotoInfo, path, pThis, osds, powerCtrlPtr]() mutable
{ {
pThis->TakePhotoCb(1, localPhotoInfo, "", 0);
pThis->StartPushStreaming(localPhotoInfo, path, osds, powerCtrlPtr); pThis->StartPushStreaming(localPhotoInfo, path, osds, powerCtrlPtr);
}); });

@ -32,7 +32,15 @@ std::string HangYuCtrl::GetStreamingUrl(uint8_t channel)
std::vector<uint8_t> resData; std::vector<uint8_t> resData;
int res = DoGetRequest(url, HTTP_AUTH_TYPE_BASIC, m_userName.c_str(), m_password.c_str(), m_netHandle, resData); int res = 0;
for (int idx = 0; idx < 10; idx++)
{
res = DoGetRequest(url, HTTP_AUTH_TYPE_BASIC, m_userName.c_str(), m_password.c_str(), m_netHandle, resData);
if (res == 0 && !resData.empty())
{
break;
}
}
if (res != 0 || resData.empty()) if (res != 0 || resData.empty())
{ {
return ""; return "";

Loading…
Cancel
Save