mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-13 13:37:49 +08:00
rtsp/http类型播放协议支持自定义header
This commit is contained in:
parent
88b422db08
commit
a8f5cedd84
@ -400,6 +400,7 @@ const string kProxyUrl = "proxy_url";
|
|||||||
const string kRtspSpeed = "rtsp_speed";
|
const string kRtspSpeed = "rtsp_speed";
|
||||||
const string kLatency = "latency";
|
const string kLatency = "latency";
|
||||||
const string kPassPhrase = "passPhrase";
|
const string kPassPhrase = "passPhrase";
|
||||||
|
const string kCustomHeader = "custom_header";
|
||||||
} // namespace Client
|
} // namespace Client
|
||||||
|
|
||||||
} // namespace mediakit
|
} // namespace mediakit
|
||||||
|
|||||||
@ -630,6 +630,8 @@ extern const std::string kRtspSpeed;
|
|||||||
extern const std::string kLatency;
|
extern const std::string kLatency;
|
||||||
// Set SRT PassPhrase
|
// Set SRT PassPhrase
|
||||||
extern const std::string kPassPhrase;
|
extern const std::string kPassPhrase;
|
||||||
|
// 自定义rtsp/http头
|
||||||
|
extern const std::string kCustomHeader;
|
||||||
} // namespace Client
|
} // namespace Client
|
||||||
} // namespace mediakit
|
} // namespace mediakit
|
||||||
|
|
||||||
|
|||||||
@ -36,6 +36,7 @@ void HlsPlayer::fetchIndexFile() {
|
|||||||
}
|
}
|
||||||
setCompleteTimeout((*this)[Client::kTimeoutMS].as<int>());
|
setCompleteTimeout((*this)[Client::kTimeoutMS].as<int>());
|
||||||
setMethod("GET");
|
setMethod("GET");
|
||||||
|
addCustomHeader(this);
|
||||||
sendRequest(_play_url);
|
sendRequest(_play_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@ void TsPlayer::play(const string &url) {
|
|||||||
setHeaderTimeout((*this)[Client::kTimeoutMS].as<int>());
|
setHeaderTimeout((*this)[Client::kTimeoutMS].as<int>());
|
||||||
setBodyTimeout((*this)[Client::kMediaTimeoutMS].as<int>());
|
setBodyTimeout((*this)[Client::kMediaTimeoutMS].as<int>());
|
||||||
setMethod("GET");
|
setMethod("GET");
|
||||||
|
addCustomHeader(this);
|
||||||
sendRequest(url);
|
sendRequest(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,9 +21,22 @@
|
|||||||
#include "Common/MediaSink.h"
|
#include "Common/MediaSink.h"
|
||||||
#include "Extension/Frame.h"
|
#include "Extension/Frame.h"
|
||||||
#include "Extension/Track.h"
|
#include "Extension/Track.h"
|
||||||
|
#include "Common/config.h"
|
||||||
|
#include "Common/Parser.h"
|
||||||
|
|
||||||
namespace mediakit {
|
namespace mediakit {
|
||||||
|
|
||||||
|
template <typename Type>
|
||||||
|
void addCustomHeader(Type *c) {
|
||||||
|
auto &custom_header = (*c)[Client::kCustomHeader];
|
||||||
|
if (!custom_header.empty()) {
|
||||||
|
auto args = mediakit::Parser::parseArgs(custom_header);
|
||||||
|
for (auto &pr : args) {
|
||||||
|
c->addHeader(pr.first, pr.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PlayerBase : public TrackSource, public toolkit::mINI {
|
class PlayerBase : public TrackSource, public toolkit::mINI {
|
||||||
public:
|
public:
|
||||||
using Ptr = std::shared_ptr<PlayerBase>;
|
using Ptr = std::shared_ptr<PlayerBase>;
|
||||||
|
|||||||
@ -26,6 +26,7 @@ void FlvPlayer::play(const string &url) {
|
|||||||
setHeaderTimeout((*this)[Client::kTimeoutMS].as<int>());
|
setHeaderTimeout((*this)[Client::kTimeoutMS].as<int>());
|
||||||
setBodyTimeout((*this)[Client::kMediaTimeoutMS].as<int>());
|
setBodyTimeout((*this)[Client::kMediaTimeoutMS].as<int>());
|
||||||
setMethod("GET");
|
setMethod("GET");
|
||||||
|
addCustomHeader(this);
|
||||||
sendRequest(url);
|
sendRequest(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -91,22 +91,22 @@ void RtspPlayer::play(const string &strUrl) {
|
|||||||
_speed = (*this)[Client::kRtspSpeed].as<float>();
|
_speed = (*this)[Client::kRtspSpeed].as<float>();
|
||||||
DebugL << url._url << " " << (url._user.size() ? url._user : "null") << " " << (url._passwd.size() ? url._passwd : "null") << " " << _rtp_type;
|
DebugL << url._url << " " << (url._user.size() ? url._user : "null") << " " << (url._passwd.size() ? url._passwd : "null") << " " << _rtp_type;
|
||||||
|
|
||||||
weak_ptr<RtspPlayer> weakSelf = static_pointer_cast<RtspPlayer>(shared_from_this());
|
weak_ptr<RtspPlayer> weak_self = static_pointer_cast<RtspPlayer>(shared_from_this());
|
||||||
float playTimeOutSec = (*this)[Client::kTimeoutMS].as<int>() / 1000.0f;
|
float playTimeOutSec = (*this)[Client::kTimeoutMS].as<int>() / 1000.0f;
|
||||||
_play_check_timer.reset(new Timer(
|
_play_check_timer.reset(new Timer(playTimeOutSec,[weak_self]() {
|
||||||
playTimeOutSec,
|
if (auto strong_self = weak_self.lock()) {
|
||||||
[weakSelf]() {
|
strong_self->onPlayResult_l(SockException(Err_timeout, "play rtsp timeout"), false);
|
||||||
auto strongSelf = weakSelf.lock();
|
}
|
||||||
if (!strongSelf) {
|
return false;
|
||||||
return false;
|
}, getPoller()));
|
||||||
}
|
|
||||||
strongSelf->onPlayResult_l(SockException(Err_timeout, "play rtsp timeout"), false);
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
getPoller()));
|
|
||||||
|
|
||||||
if (!(*this)[Client::kNetAdapter].empty()) {
|
auto &adapter = (*this)[Client::kNetAdapter];
|
||||||
setNetAdapter((*this)[Client::kNetAdapter]);
|
if (!adapter.empty()) {
|
||||||
|
setNetAdapter(std::move(adapter));
|
||||||
|
}
|
||||||
|
auto &custom_header = (*this)[Client::kCustomHeader];
|
||||||
|
if (!custom_header.empty()) {
|
||||||
|
_custom_header = mediakit::Parser::parseArgs(custom_header);
|
||||||
}
|
}
|
||||||
startConnect(url._host, url._port, playTimeOutSec);
|
startConnect(url._host, url._port, playTimeOutSec);
|
||||||
}
|
}
|
||||||
@ -632,7 +632,11 @@ void RtspPlayer::sendRtspRequest(const string &cmd, const string &url, const std
|
|||||||
key = val;
|
key = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (cmd == "PLAY") {
|
||||||
|
for (auto &pr : _custom_header) {
|
||||||
|
header_map.emplace(pr.first, pr.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
sendRtspRequest(cmd, url, header_map);
|
sendRtspRequest(cmd, url, header_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -203,6 +203,8 @@ private:
|
|||||||
// 统计rtp并发送rtcp [AUTO-TRANSLATED:0ac2b665]
|
// 统计rtp并发送rtcp [AUTO-TRANSLATED:0ac2b665]
|
||||||
// Statistics rtp and send rtcp
|
// Statistics rtp and send rtcp
|
||||||
std::vector<RtcpContext::Ptr> _rtcp_context;
|
std::vector<RtcpContext::Ptr> _rtcp_context;
|
||||||
|
// 用户自定义rtsp头
|
||||||
|
StrCaseMap _custom_header;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace mediakit */
|
} /* namespace mediakit */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user