1
This commit is contained in:
parent
93c71e1193
commit
6d606c618e
@ -1,13 +1,50 @@
|
|||||||
// rtsp_manager.cpp
|
// rtsp_manager.cpp
|
||||||
#include "rtmp_manager.hpp"
|
#include "rtmp_manager.hpp"
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <ifaddrs.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <future>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "logger.hpp"
|
#include "logger.hpp"
|
||||||
|
|
||||||
|
static std::string get_ip_address(const std::string &ifname)
|
||||||
|
{
|
||||||
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
|
char ip[INET_ADDRSTRLEN] = {0};
|
||||||
|
|
||||||
|
if (getifaddrs(&ifaddr) == -1)
|
||||||
|
{
|
||||||
|
perror("getifaddrs");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next)
|
||||||
|
{
|
||||||
|
if (ifa->ifa_addr == nullptr) continue;
|
||||||
|
|
||||||
|
// 只看 IPv4
|
||||||
|
if (ifa->ifa_addr->sa_family == AF_INET && ifname == ifa->ifa_name)
|
||||||
|
{
|
||||||
|
void *addr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
|
||||||
|
if (inet_ntop(AF_INET, addr, ip, sizeof(ip)))
|
||||||
|
{
|
||||||
|
freeifaddrs(ifaddr);
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(ifaddr);
|
||||||
|
return ""; // 没找到
|
||||||
|
}
|
||||||
|
|
||||||
static inline std::string stream_type_suffix(StreamType type) { return (type == StreamType::MAIN) ? "_main" : "_sub"; }
|
static inline std::string stream_type_suffix(StreamType type) { return (type == StreamType::MAIN) ? "_main" : "_sub"; }
|
||||||
|
|
||||||
std::unordered_map<std::string, std::unique_ptr<RTMPManager::StreamContext>> RTMPManager::streams;
|
std::unordered_map<std::string, std::unique_ptr<RTMPManager::StreamContext>> RTMPManager::streams;
|
||||||
@ -314,7 +351,15 @@ bool RTMPManager::is_any_streaming()
|
|||||||
|
|
||||||
std::string RTMPManager::get_stream_url(const std::string &cam_name, StreamType type)
|
std::string RTMPManager::get_stream_url(const std::string &cam_name, StreamType type)
|
||||||
{
|
{
|
||||||
return "rtmp://127.0.0.1/live/" + make_stream_key(cam_name, type);
|
// 获取当前设备 enp1s0 网卡 IP(或者改成你希望的接口)
|
||||||
|
std::string ip = get_ip_address("enP2p33s0");
|
||||||
|
if (ip.empty()) ip = "127.0.0.1";
|
||||||
|
|
||||||
|
// 构建流名,例如 AHD2_main
|
||||||
|
std::string stream_name = make_stream_key(cam_name, type);
|
||||||
|
|
||||||
|
// 最终返回 WebRTC 拉流地址(不加 .flv)
|
||||||
|
return "http://" + ip + ":1985/rtc/v1/whep/?app=live&stream=" + stream_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<RTMPManager::StreamResultInfo> RTMPManager::process_push_request(const VideoPushRequest &req)
|
std::vector<RTMPManager::StreamResultInfo> RTMPManager::process_push_request(const VideoPushRequest &req)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user