mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-25 04:08:57 +08:00
parent
b8cb8957e4
commit
7ee2d66eaa
34
.github/workflows/c-cpp.yml
vendored
Normal file
34
.github/workflows/c-cpp.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
name: Linux
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: 下载submodule源码
|
||||||
|
run: mv -f .gitmodules_github .gitmodules && git submodule sync && git submodule update --init
|
||||||
|
|
||||||
|
- name: apt-get安装依赖库(非必选)
|
||||||
|
run: sudo apt-get update && sudo apt-get install -y cmake libssl-dev libsdl-dev libavcodec-dev libavutil-dev libswscale-dev libresample-dev libusrsctp-dev
|
||||||
|
|
||||||
|
- name: 下载 SRTP
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: cisco/libsrtp
|
||||||
|
fetch-depth: 1
|
||||||
|
ref: v2.3.0
|
||||||
|
path: 3rdpart/libsrtp
|
||||||
|
|
||||||
|
- name: 编译 SRTP
|
||||||
|
run: cd 3rdpart/libsrtp && ./configure --enable-openssl && make -j4 && sudo make install
|
||||||
|
|
||||||
|
- name: 编译
|
||||||
|
run: mkdir -p linux_build && cd linux_build && cmake .. -DENABLE_WEBRTC=true -DENABLE_FFMPEG=true && make -j $(nproc)
|
||||||
|
|
||||||
|
- name: 运行MediaServer
|
||||||
|
run: pwd && cd release/linux/Debug && sudo ./MediaServer -d &
|
@ -674,7 +674,7 @@ void installWebHook() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
NoticeCenter::Instance().addListener(&web_hook_tag, Broadcast::KBroadcastRtpServerTimeout, [](BroadcastRtpServerTimeoutArgs) {
|
NoticeCenter::Instance().addListener(&web_hook_tag, Broadcast::kBroadcastRtpServerTimeout, [](BroadcastRtpServerTimeoutArgs) {
|
||||||
GET_CONFIG(string, rtp_server_timeout, Hook::kOnRtpServerTimeout);
|
GET_CONFIG(string, rtp_server_timeout, Hook::kOnRtpServerTimeout);
|
||||||
if (!hook_enable || rtp_server_timeout.empty()) {
|
if (!hook_enable || rtp_server_timeout.empty()) {
|
||||||
return;
|
return;
|
||||||
|
@ -57,7 +57,7 @@ const string kBroadcastNotFoundStream = "kBroadcastNotFoundStream";
|
|||||||
const string kBroadcastStreamNoneReader = "kBroadcastStreamNoneReader";
|
const string kBroadcastStreamNoneReader = "kBroadcastStreamNoneReader";
|
||||||
const string kBroadcastHttpBeforeAccess = "kBroadcastHttpBeforeAccess";
|
const string kBroadcastHttpBeforeAccess = "kBroadcastHttpBeforeAccess";
|
||||||
const string kBroadcastSendRtpStopped = "kBroadcastSendRtpStopped";
|
const string kBroadcastSendRtpStopped = "kBroadcastSendRtpStopped";
|
||||||
const string KBroadcastRtpServerTimeout = "KBroadcastRtpServerTimeout";
|
const string kBroadcastRtpServerTimeout = "kBroadcastRtpServerTimeout";
|
||||||
|
|
||||||
} // namespace Broadcast
|
} // namespace Broadcast
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ extern const std::string kBroadcastReloadConfig;
|
|||||||
#define BroadcastReloadConfigArgs void
|
#define BroadcastReloadConfigArgs void
|
||||||
|
|
||||||
// rtp server 超时
|
// rtp server 超时
|
||||||
extern const std::string KBroadcastRtpServerTimeout;
|
extern const std::string kBroadcastRtpServerTimeout;
|
||||||
#define BroadcastRtpServerTimeoutArgs uint16_t &local_port, const string &stream_id,int &tcp_mode, bool &re_use_port, uint32_t &ssrc
|
#define BroadcastRtpServerTimeoutArgs uint16_t &local_port, const string &stream_id,int &tcp_mode, bool &re_use_port, uint32_t &ssrc
|
||||||
|
|
||||||
#define ReloadConfigTag ((void *)(0xFF))
|
#define ReloadConfigTag ((void *)(0xFF))
|
||||||
|
@ -166,11 +166,11 @@ void HttpSession::onError(const SockException &err) {
|
|||||||
if (_is_live_stream) {
|
if (_is_live_stream) {
|
||||||
// flv/ts播放器
|
// flv/ts播放器
|
||||||
uint64_t duration = _ticker.createdTime() / 1000;
|
uint64_t duration = _ticker.createdTime() / 1000;
|
||||||
WarnP(this) << "FLV/TS/FMP4播放器(" << _mediaInfo.shortUrl() << ")断开:" << err << ",耗时(s):" << duration;
|
WarnP(this) << "FLV/TS/FMP4播放器(" << _media_info.shortUrl() << ")断开:" << err << ",耗时(s):" << duration;
|
||||||
|
|
||||||
GET_CONFIG(uint32_t, iFlowThreshold, General::kFlowThreshold);
|
GET_CONFIG(uint32_t, iFlowThreshold, General::kFlowThreshold);
|
||||||
if (_total_bytes_usage >= iFlowThreshold * 1024) {
|
if (_total_bytes_usage >= iFlowThreshold * 1024) {
|
||||||
NOTICE_EMIT(BroadcastFlowReportArgs, Broadcast::kBroadcastFlowReport, _mediaInfo, _total_bytes_usage, duration, true, *this);
|
NOTICE_EMIT(BroadcastFlowReportArgs, Broadcast::kBroadcastFlowReport, _media_info, _total_bytes_usage, duration, true, *this);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -263,9 +263,9 @@ bool HttpSession::checkLiveStream(const string &schema, const string &url_suffix
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 解析带上协议+参数完整的url
|
// 解析带上协议+参数完整的url
|
||||||
_mediaInfo.parse(schema + "://" + _parser["Host"] + url);
|
_media_info.parse(schema + "://" + _parser["Host"] + url);
|
||||||
|
|
||||||
if (_mediaInfo.app.empty() || _mediaInfo.stream.empty()) {
|
if (_media_info.app.empty() || _media_info.stream.empty()) {
|
||||||
// url不合法
|
// url不合法
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -288,7 +288,7 @@ bool HttpSession::checkLiveStream(const string &schema, const string &url_suffix
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 异步查找直播流
|
// 异步查找直播流
|
||||||
MediaSource::findAsync(strong_self->_mediaInfo, strong_self, [weak_self, close_flag, cb](const MediaSource::Ptr &src) {
|
MediaSource::findAsync(strong_self->_media_info, strong_self, [weak_self, close_flag, cb](const MediaSource::Ptr &src) {
|
||||||
auto strong_self = weak_self.lock();
|
auto strong_self = weak_self.lock();
|
||||||
if (!strong_self) {
|
if (!strong_self) {
|
||||||
// 本对象已经销毁
|
// 本对象已经销毁
|
||||||
@ -311,7 +311,7 @@ bool HttpSession::checkLiveStream(const string &schema, const string &url_suffix
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto flag = NOTICE_EMIT(BroadcastMediaPlayedArgs, Broadcast::kBroadcastMediaPlayed, _mediaInfo, invoker, *this);
|
auto flag = NOTICE_EMIT(BroadcastMediaPlayedArgs, Broadcast::kBroadcastMediaPlayed, _media_info, invoker, *this);
|
||||||
if (!flag) {
|
if (!flag) {
|
||||||
// 该事件无人监听,默认不鉴权
|
// 该事件无人监听,默认不鉴权
|
||||||
onRes("");
|
onRes("");
|
||||||
|
@ -124,7 +124,7 @@ private:
|
|||||||
void setSocketFlags();
|
void setSocketFlags();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MediaInfo _mediaInfo;
|
MediaInfo _media_info;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _is_live_stream = false;
|
bool _is_live_stream = false;
|
||||||
|
@ -102,7 +102,7 @@ public:
|
|||||||
process->setOnDetach(std::move(strong_self->_on_detach));
|
process->setOnDetach(std::move(strong_self->_on_detach));
|
||||||
}
|
}
|
||||||
if (!process) { // process 未创建,触发rtp server 超时事件
|
if (!process) { // process 未创建,触发rtp server 超时事件
|
||||||
NOTICE_EMIT(BroadcastRtpServerTimeoutArgs, Broadcast::KBroadcastRtpServerTimeout, strong_self->_local_port, strong_self->_stream_id,
|
NOTICE_EMIT(BroadcastRtpServerTimeoutArgs, Broadcast::kBroadcastRtpServerTimeout, strong_self->_local_port, strong_self->_stream_id,
|
||||||
(int)strong_self->_tcp_mode, strong_self->_re_use_port, strong_self->_ssrc);
|
(int)strong_self->_tcp_mode, strong_self->_re_use_port, strong_self->_ssrc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,7 +161,7 @@ void RtpServer::start(uint16_t local_port, const string &stream_id, TcpMode tcp_
|
|||||||
if (local_port == 0) {
|
if (local_port == 0) {
|
||||||
//随机端口,rtp端口采用偶数
|
//随机端口,rtp端口采用偶数
|
||||||
auto pair = std::make_pair(rtp_socket, rtcp_socket);
|
auto pair = std::make_pair(rtp_socket, rtcp_socket);
|
||||||
makeSockPair(pair, local_ip, re_use_port);
|
makeSockPair(pair, local_ip, re_use_port, TcpMode::NONE == tcp_mode);
|
||||||
local_port = rtp_socket->get_local_port();
|
local_port = rtp_socket->get_local_port();
|
||||||
} else if (!rtp_socket->bindUdpSock(local_port, local_ip, re_use_port)) {
|
} else if (!rtp_socket->bindUdpSock(local_port, local_ip, re_use_port)) {
|
||||||
//用户指定端口
|
//用户指定端口
|
||||||
|
Loading…
Reference in New Issue
Block a user