mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-16 13:05:59 +08:00
AI automatically translates all comments in the code into English (#3917)
This commit is contained in:
@@ -93,20 +93,24 @@ API_EXPORT void API_CALL mk_env_init2(int thread_num,
|
||||
int ssl_is_path,
|
||||
const char *ssl,
|
||||
const char *ssl_pwd) {
|
||||
//确保只初始化一次
|
||||
// 确保只初始化一次 [AUTO-TRANSLATED:e4b32b0f]
|
||||
// Ensure initialization only happens once
|
||||
static onceToken token([&]() {
|
||||
if (log_mask & LOG_CONSOLE) {
|
||||
//控制台日志
|
||||
// 控制台日志 [AUTO-TRANSLATED:5c00e83f]
|
||||
// Console log
|
||||
Logger::Instance().add(std::make_shared<ConsoleChannel>("ConsoleChannel", (LogLevel) log_level));
|
||||
}
|
||||
|
||||
if (log_mask & LOG_CALLBACK) {
|
||||
//广播日志
|
||||
// 广播日志 [AUTO-TRANSLATED:67556df8]
|
||||
// Broadcast log
|
||||
Logger::Instance().add(std::make_shared<EventChannel>("EventChannel", (LogLevel) log_level));
|
||||
}
|
||||
|
||||
if (log_mask & LOG_FILE) {
|
||||
//日志文件
|
||||
// 日志文件 [AUTO-TRANSLATED:afacc934]
|
||||
// Log file
|
||||
auto channel = std::make_shared<FileChannel>("FileChannel",
|
||||
log_file_path ? File::absolutePath("", log_file_path) :
|
||||
exeDir() + "log/", (LogLevel) log_level);
|
||||
@@ -114,15 +118,18 @@ API_EXPORT void API_CALL mk_env_init2(int thread_num,
|
||||
Logger::Instance().add(channel);
|
||||
}
|
||||
|
||||
//异步日志线程
|
||||
// 异步日志线程 [AUTO-TRANSLATED:1cc193a1]
|
||||
// Asynchronous log thread
|
||||
Logger::Instance().setWriter(std::make_shared<AsyncLogWriter>());
|
||||
|
||||
//设置线程数
|
||||
// 设置线程数 [AUTO-TRANSLATED:22ec5cc9]
|
||||
// Set thread count
|
||||
EventPollerPool::setPoolSize(thread_num);
|
||||
WorkThreadPool::setPoolSize(thread_num);
|
||||
|
||||
if (ini && ini[0]) {
|
||||
//设置配置文件
|
||||
// 设置配置文件 [AUTO-TRANSLATED:2216856d]
|
||||
// Set configuration file
|
||||
if (ini_is_path) {
|
||||
try {
|
||||
mINI::Instance().parseFile(ini);
|
||||
@@ -136,7 +143,8 @@ API_EXPORT void API_CALL mk_env_init2(int thread_num,
|
||||
}
|
||||
|
||||
if (ssl && ssl[0]) {
|
||||
//设置ssl证书
|
||||
// 设置ssl证书 [AUTO-TRANSLATED:e441027c]
|
||||
// Set SSL certificate
|
||||
SSL_Initor::Instance().loadCertificate(ssl, true, ssl_pwd ? ssl_pwd : "", ssl_is_path);
|
||||
}
|
||||
});
|
||||
@@ -157,7 +165,8 @@ API_EXPORT void API_CALL mk_set_option(const char *key, const char *val) {
|
||||
return;
|
||||
}
|
||||
mINI::Instance()[key] = val;
|
||||
//广播配置文件热加载
|
||||
// 广播配置文件热加载 [AUTO-TRANSLATED:7ae561f3]
|
||||
// Broadcast configuration file hot reload
|
||||
NOTICE_EMIT(BroadcastReloadConfigArgs, Broadcast::kBroadcastReloadConfig);
|
||||
}
|
||||
|
||||
@@ -226,7 +235,8 @@ API_EXPORT uint16_t API_CALL mk_rtmp_server_start(uint16_t port, int ssl) {
|
||||
API_EXPORT uint16_t API_CALL mk_rtp_server_start(uint16_t port){
|
||||
#ifdef ENABLE_RTPPROXY
|
||||
try {
|
||||
//创建rtp 服务器
|
||||
// 创建rtp 服务器 [AUTO-TRANSLATED:480fda83]
|
||||
// Create RTP server
|
||||
rtpServer = std::make_shared<RtpServer>();
|
||||
rtpServer->start(port);
|
||||
return rtpServer->getPort();
|
||||
@@ -244,7 +254,8 @@ API_EXPORT uint16_t API_CALL mk_rtp_server_start(uint16_t port){
|
||||
API_EXPORT uint16_t API_CALL mk_rtc_server_start(uint16_t port) {
|
||||
#ifdef ENABLE_WEBRTC
|
||||
try {
|
||||
//创建rtc udp服务器
|
||||
// 创建rtc udp服务器 [AUTO-TRANSLATED:9287972e]
|
||||
// Create RTC UDP server
|
||||
rtcServer_udp = std::make_shared<UdpServer>();
|
||||
rtcServer_udp->setOnCreateSocket([](const EventPoller::Ptr &poller, const Buffer::Ptr &buf, struct sockaddr *, int) {
|
||||
if (!buf) {
|
||||
@@ -252,13 +263,15 @@ API_EXPORT uint16_t API_CALL mk_rtc_server_start(uint16_t port) {
|
||||
}
|
||||
auto new_poller = WebRtcSession::queryPoller(buf);
|
||||
if (!new_poller) {
|
||||
//该数据对应的webrtc对象未找到,丢弃之
|
||||
// 该数据对应的webrtc对象未找到,丢弃之 [AUTO-TRANSLATED:d401f8cb]
|
||||
// The WebRTC object corresponding to this data was not found, discard it
|
||||
return Socket::Ptr();
|
||||
}
|
||||
return Socket::createSocket(new_poller, false);
|
||||
});
|
||||
rtcServer_udp->start<WebRtcSession>(port);
|
||||
//创建rtc tcp服务器
|
||||
// 创建rtc tcp服务器 [AUTO-TRANSLATED:1eefd92f]
|
||||
// Create RTC TCP server
|
||||
rtcServer_tcp = std::make_shared<TcpServer>();
|
||||
rtcServer_tcp->start<WebRtcSession>(rtcServer_udp->getPort());
|
||||
return rtcServer_udp->getPort();
|
||||
@@ -328,7 +341,8 @@ API_EXPORT uint16_t API_CALL mk_srt_server_start(uint16_t port) {
|
||||
}
|
||||
auto new_poller = SRT::SrtSession::queryPoller(buf);
|
||||
if (!new_poller) {
|
||||
//握手第一阶段
|
||||
// 握手第一阶段 [AUTO-TRANSLATED:6b3abcd4]
|
||||
// Handshake stage one
|
||||
return Socket::createSocket(poller, false);
|
||||
}
|
||||
return Socket::createSocket(new_poller, false);
|
||||
|
||||
@@ -228,7 +228,8 @@ API_EXPORT mk_track API_CALL mk_media_source_get_track(const mk_media_source ctx
|
||||
API_EXPORT float API_CALL mk_media_source_get_track_loss(const mk_media_source ctx, const mk_track track) {
|
||||
assert(ctx);
|
||||
MediaSource *src = (MediaSource *)ctx;
|
||||
// rtp推流只有一个统计器,但是可能有多个track,如果短时间多次获取间隔丢包率,第二次会获取为-1
|
||||
// rtp推流只有一个统计器,但是可能有多个track,如果短时间多次获取间隔丢包率,第二次会获取为-1 [AUTO-TRANSLATED:b30fec2c]
|
||||
// RTP streaming has only one statistics object, but there may be multiple tracks. If the packet loss rate is obtained multiple times in a short period, the second time will be obtained as -1
|
||||
return src->getLossRate((*((Track::Ptr *)track))->getTrackType());
|
||||
}
|
||||
|
||||
@@ -608,7 +609,8 @@ API_EXPORT void API_CALL mk_rtc_send_datachannel(const mk_rtc_transport ctx, uin
|
||||
std::string msg_str(msg, len);
|
||||
std::weak_ptr<WebRtcTransport> weak_trans = transport->shared_from_this();
|
||||
transport->getPoller()->async([streamId, ppid, msg_str, weak_trans]() {
|
||||
// 切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:12d77fca]
|
||||
// Operate after switching threads
|
||||
if (auto trans = weak_trans.lock()) {
|
||||
trans->sendDatachannel(streamId, ppid, msg_str.c_str(), msg_str.size());
|
||||
}
|
||||
|
||||
@@ -45,12 +45,14 @@ H264Splitter::~H264Splitter() {
|
||||
ssize_t H264Splitter::onRecvHeader(const char *data, size_t len) {
|
||||
auto frame = Factory::getFrameFromPtr(_h265 ? CodecH265 : CodecH264, (char *)data, len, 0, 0);
|
||||
if (_have_decode_frame && (frame->decodeAble() || frame->configFrame())) {
|
||||
// 缓存中存在可解码帧,且下一帧是可解码帧或者配置帧,那么flush缓存
|
||||
// 缓存中存在可解码帧,且下一帧是可解码帧或者配置帧,那么flush缓存 [AUTO-TRANSLATED:2c52093b]
|
||||
// Flush the cache if there are decodable frames in the cache and the next frame is a decodable frame or a configuration frame.
|
||||
_cb(_buffer.data(), _buffer.size());
|
||||
_buffer.assign(data, len);
|
||||
_have_decode_frame = frame->decodeAble();
|
||||
} else {
|
||||
// 还需要缓存
|
||||
// 还需要缓存 [AUTO-TRANSLATED:a4dc19cb]
|
||||
// Still need to cache
|
||||
_buffer.append(data, len);
|
||||
_have_decode_frame = _have_decode_frame || frame->decodeAble();
|
||||
}
|
||||
@@ -59,10 +61,12 @@ ssize_t H264Splitter::onRecvHeader(const char *data, size_t len) {
|
||||
|
||||
const char *H264Splitter::onSearchPacketTail(const char *data, size_t len) {
|
||||
for (size_t i = 2; len > 2 && i < len - 2; ++i) {
|
||||
//判断0x00 00 01
|
||||
// 判断0x00 00 01 [AUTO-TRANSLATED:afa3d4c2]
|
||||
// Determine if it is 0x00 00 01
|
||||
if (data[i] == 0 && data[i + 1] == 0 && data[i + 2] == 1) {
|
||||
if (i > 0 && data[i - 1] == 0) {
|
||||
//找到0x00 00 00 01
|
||||
// 找到0x00 00 00 01 [AUTO-TRANSLATED:96a10021]
|
||||
// Find 0x00 00 00 01
|
||||
return data + i - 1;
|
||||
}
|
||||
return data + i;
|
||||
|
||||
@@ -21,7 +21,8 @@ public:
|
||||
using Ptr = std::shared_ptr<MediaHelper>;
|
||||
MediaHelper(const char *vhost, const char *app, const char *stream, float duration, const ProtocolOption &option) {
|
||||
_poller = EventPollerPool::Instance().getPoller();
|
||||
// 在poller线程中创建DevChannel(MultiMediaSourceMuxer)对象,确保严格的线程安全限制
|
||||
// 在poller线程中创建DevChannel(MultiMediaSourceMuxer)对象,确保严格的线程安全限制 [AUTO-TRANSLATED:d5063d7a]
|
||||
// Create a DevChannel (MultiMediaSourceMuxer) object in the poller thread to ensure strict thread safety restrictions
|
||||
auto tuple = MediaTuple{vhost, app, stream};
|
||||
_poller->sync([&]() { _channel = std::make_shared<DevChannel>(tuple, duration, option); });
|
||||
}
|
||||
@@ -58,14 +59,17 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
// 通知其停止推流
|
||||
// 通知其停止推流 [AUTO-TRANSLATED:d69d10d8]
|
||||
// Notify it to stop streaming
|
||||
bool close(MediaSource &sender) override {
|
||||
if (!_on_close) {
|
||||
//未设置回调,没法关闭
|
||||
// 未设置回调,没法关闭 [AUTO-TRANSLATED:2c1423fe]
|
||||
// No callback is set, so it cannot be closed
|
||||
WarnL << "请使用mk_media_set_on_close函数设置回调函数!";
|
||||
return false;
|
||||
}
|
||||
//请在回调中调用mk_media_release函数释放资源,否则MediaSource::close()操作不会生效
|
||||
// 请在回调中调用mk_media_release函数释放资源,否则MediaSource::close()操作不会生效 [AUTO-TRANSLATED:da067eb0]
|
||||
// Please call the mk_media_release function to release resources in the callback, otherwise the MediaSource::close() operation will not take effect
|
||||
_on_close(_on_close_data.get());
|
||||
WarnL << "close media: " << sender.getUrl();
|
||||
return true;
|
||||
@@ -78,7 +82,8 @@ protected:
|
||||
return _on_seek(_on_seek_data.get(), stamp);
|
||||
}
|
||||
|
||||
// 通知暂停或恢复
|
||||
// 通知暂停或恢复 [AUTO-TRANSLATED:ee3c219f]
|
||||
// Notify pause or resume
|
||||
bool pause(MediaSource &sender, bool pause) override {
|
||||
if (!_on_pause) {
|
||||
return false;
|
||||
@@ -86,7 +91,8 @@ protected:
|
||||
return _on_pause(_on_pause_data.get(), pause);
|
||||
}
|
||||
|
||||
//通知倍数播放
|
||||
// 通知倍数播放 [AUTO-TRANSLATED:12e66e3f]
|
||||
// Notify playback speed
|
||||
bool speed(MediaSource &sender, float speed) override {
|
||||
if (!_on_speed) {
|
||||
return false;
|
||||
@@ -297,7 +303,8 @@ API_EXPORT void API_CALL mk_media_start_send_rtp2(mk_media ctx, const char *dst_
|
||||
args.close_delay_ms = 30 * 1000;
|
||||
args.con_type = (mediakit::MediaSourceEvent::SendRtpArgs::ConType)con_type;
|
||||
|
||||
// sender参数无用
|
||||
// sender参数无用 [AUTO-TRANSLATED:21590ae5]
|
||||
// The sender parameter is useless
|
||||
auto ref = *obj;
|
||||
std::shared_ptr<void> ptr(user_data, user_data_free ? user_data_free : [](void *) {});
|
||||
(*obj)->getChannel()->getOwnerPoller(MediaSource::NullMediaSource())->async([args, ref, cb, ptr]() {
|
||||
@@ -335,7 +342,8 @@ API_EXPORT void API_CALL mk_media_start_send_rtp4(mk_media ctx, const char *dst_
|
||||
args.close_delay_ms = (*ini_ptr)["close_delay_ms"].empty() ? 30000 : (*ini_ptr)["close_delay_ms"].as<int>();
|
||||
args.rtcp_timeout_ms = (*ini_ptr)["rtcp_timeout_ms"].empty() ? 30000 : (*ini_ptr)["rtcp_timeout_ms"].as<int>();
|
||||
args.rtcp_send_interval_ms = (*ini_ptr)["rtcp_send_interval_ms"].empty() ? 5000 : (*ini_ptr)["rtcp_send_interval_ms"].as<int>();
|
||||
// sender参数无用
|
||||
// sender参数无用 [AUTO-TRANSLATED:21590ae5]
|
||||
// The sender parameter is useless
|
||||
auto ref = *obj;
|
||||
std::shared_ptr<void> ptr(
|
||||
user_data, user_data_free ? user_data_free : [](void *) {});
|
||||
@@ -351,7 +359,8 @@ API_EXPORT void API_CALL mk_media_start_send_rtp4(mk_media ctx, const char *dst_
|
||||
API_EXPORT void API_CALL mk_media_stop_send_rtp(mk_media ctx, const char *ssrc) {
|
||||
assert(ctx);
|
||||
MediaHelper::Ptr *obj = (MediaHelper::Ptr *)ctx;
|
||||
// sender参数无用
|
||||
// sender参数无用 [AUTO-TRANSLATED:21590ae5]
|
||||
// The sender parameter is useless
|
||||
auto ref = *obj;
|
||||
string ssrc_str = ssrc ? ssrc : "";
|
||||
(*obj)->getChannel()->getOwnerPoller(MediaSource::NullMediaSource())->async([ref, ssrc_str]() {
|
||||
|
||||
@@ -57,14 +57,16 @@ public:
|
||||
void onEvent(bool is_shutdown, const SockException &ex){
|
||||
lock_guard<recursive_mutex> lck(_mtx);
|
||||
if (is_shutdown) {
|
||||
//播放中断
|
||||
// 播放中断 [AUTO-TRANSLATED:9b841156]
|
||||
// Play interrupted
|
||||
if (_on_shutdown) {
|
||||
_on_shutdown(_on_shutdown_data.get(), ex.getErrCode(), ex.what(), nullptr, 0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//播放结果
|
||||
// 播放结果 [AUTO-TRANSLATED:15f1e8fe]
|
||||
// Play result
|
||||
if (_on_play) {
|
||||
auto cpp_tracks = _player->getTracks(false);
|
||||
mk_track tracks[TrackMax] = {nullptr};
|
||||
@@ -118,7 +120,8 @@ API_EXPORT void API_CALL mk_player_set_option(mk_player ctx,const char* key,cons
|
||||
auto player = obj.getPlayer();
|
||||
string key_str(key), val_str(val);
|
||||
player->getPoller()->async([key_str,val_str,player](){
|
||||
//切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:b8f01c71]
|
||||
// Operate after switching threads
|
||||
(*player)[key_str] = val_str;
|
||||
});
|
||||
}
|
||||
@@ -128,7 +131,8 @@ API_EXPORT void API_CALL mk_player_play(mk_player ctx, const char *url) {
|
||||
auto player = obj.getPlayer();
|
||||
string url_str(url);
|
||||
player->getPoller()->async([url_str,player](){
|
||||
//切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:b8f01c71]
|
||||
// Operate after switching threads
|
||||
player->play(url_str);
|
||||
});
|
||||
}
|
||||
@@ -138,7 +142,8 @@ API_EXPORT void API_CALL mk_player_pause(mk_player ctx, int pause) {
|
||||
MediaPlayerForC &obj = **((MediaPlayerForC::Ptr *)ctx);
|
||||
auto player = obj.getPlayer();
|
||||
player->getPoller()->async([pause,player](){
|
||||
//切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:b8f01c71]
|
||||
// Operate after switching threads
|
||||
player->pause(pause);
|
||||
});
|
||||
}
|
||||
@@ -148,7 +153,8 @@ API_EXPORT void API_CALL mk_player_speed(mk_player ctx, float speed) {
|
||||
MediaPlayerForC &obj = **((MediaPlayerForC::Ptr *) ctx);
|
||||
auto player = obj.getPlayer();
|
||||
player->getPoller()->async([speed, player]() {
|
||||
//切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:b8f01c71]
|
||||
// Operate after switching threads
|
||||
player->speed(speed);
|
||||
});
|
||||
}
|
||||
@@ -158,7 +164,8 @@ API_EXPORT void API_CALL mk_player_seekto(mk_player ctx, float progress) {
|
||||
MediaPlayerForC &obj = **((MediaPlayerForC::Ptr *)ctx);
|
||||
auto player = obj.getPlayer();
|
||||
player->getPoller()->async([progress,player](){
|
||||
//切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:b8f01c71]
|
||||
// Operate after switching threads
|
||||
player->seekTo(progress);
|
||||
});
|
||||
}
|
||||
@@ -168,7 +175,8 @@ API_EXPORT void API_CALL mk_player_seekto_pos(mk_player ctx, int seek_pos) {
|
||||
MediaPlayerForC &obj = **((MediaPlayerForC::Ptr *) ctx);
|
||||
auto player = obj.getPlayer();
|
||||
player->getPoller()->async([seek_pos, player]() {
|
||||
//切换线程后再操作
|
||||
// 切换线程后再操作 [AUTO-TRANSLATED:b8f01c71]
|
||||
// Operate after switching threads
|
||||
player->seekTo((uint32_t) seek_pos);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@ API_EXPORT void API_CALL mk_proxy_player_set_option(mk_proxy_player ctx, const c
|
||||
PlayerProxy::Ptr &obj = *((PlayerProxy::Ptr *) ctx);
|
||||
std::string key_str(key), val_str(val);
|
||||
obj->getPoller()->async([obj,key_str,val_str](){
|
||||
//切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:b78259f9]
|
||||
// Switch threads and then operate
|
||||
(*obj)[key_str] = val_str;
|
||||
});
|
||||
}
|
||||
@@ -63,7 +64,8 @@ API_EXPORT void API_CALL mk_proxy_player_play(mk_proxy_player ctx, const char *u
|
||||
PlayerProxy::Ptr &obj = *((PlayerProxy::Ptr *) ctx);
|
||||
std::string url_str(url);
|
||||
obj->getPoller()->async([obj,url_str](){
|
||||
//切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:b78259f9]
|
||||
// Switch threads and then operate
|
||||
obj->play(url_str);
|
||||
});
|
||||
}
|
||||
@@ -77,7 +79,8 @@ API_EXPORT void API_CALL mk_proxy_player_set_on_close2(mk_proxy_player ctx, on_m
|
||||
PlayerProxy::Ptr &obj = *((PlayerProxy::Ptr *)ctx);
|
||||
std::shared_ptr<void> ptr(user_data, user_data_free ? user_data_free : [](void *) {});
|
||||
obj->getPoller()->async([obj, cb, ptr]() {
|
||||
// 切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:bae49fee]
|
||||
// Switch threads and then operate
|
||||
obj->setOnClose([cb, ptr](const SockException &ex) {
|
||||
if (cb) {
|
||||
cb(ptr.get(), ex.getErrCode(), ex.what(), ex.getCustomCode());
|
||||
@@ -91,7 +94,8 @@ API_EXPORT void API_CALL mk_proxy_player_set_on_play_result(mk_proxy_player ctx,
|
||||
PlayerProxy::Ptr &obj = *((PlayerProxy::Ptr *)ctx);
|
||||
std::shared_ptr<void> ptr(user_data, user_data_free ? user_data_free : [](void *) {});
|
||||
obj->getPoller()->async([obj, cb, ptr]() {
|
||||
// 切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:bae49fee]
|
||||
// Switch threads and then operate
|
||||
obj->setPlayCallbackOnce([cb, ptr](const SockException &ex) {
|
||||
if (cb) {
|
||||
cb(ptr.get(), ex.getErrCode(), ex.what(), ex.getCustomCode());
|
||||
|
||||
@@ -39,7 +39,8 @@ API_EXPORT void API_CALL mk_pusher_set_option(mk_pusher ctx, const char *key, co
|
||||
MediaPusher::Ptr &obj = *((MediaPusher::Ptr *)ctx);
|
||||
std::string key_str(key), val_str(val);
|
||||
obj->getPoller()->async([obj,key_str,val_str](){
|
||||
//切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:b78259f9]
|
||||
// Switch threads and then operate
|
||||
(*obj)[key_str] = val_str;
|
||||
});
|
||||
}
|
||||
@@ -49,7 +50,8 @@ API_EXPORT void API_CALL mk_pusher_publish(mk_pusher ctx,const char *url){
|
||||
MediaPusher::Ptr &obj = *((MediaPusher::Ptr *)ctx);
|
||||
std::string url_str(url);
|
||||
obj->getPoller()->async([obj,url_str](){
|
||||
//切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:b78259f9]
|
||||
// Switch threads and then operate
|
||||
obj->publish(url_str);
|
||||
});
|
||||
}
|
||||
@@ -63,7 +65,8 @@ API_EXPORT void API_CALL mk_pusher_set_on_result2(mk_pusher ctx, on_mk_push_even
|
||||
MediaPusher::Ptr &obj = *((MediaPusher::Ptr *)ctx);
|
||||
std::shared_ptr<void> ptr(user_data, user_data_free ? user_data_free : [](void *) {});
|
||||
obj->getPoller()->async([obj, cb, ptr]() {
|
||||
// 切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:bae49fee]
|
||||
// Switch threads and then operate
|
||||
obj->setOnPublished([cb, ptr](const SockException &ex) { cb(ptr.get(), ex.getErrCode(), ex.what()); });
|
||||
});
|
||||
}
|
||||
@@ -77,7 +80,8 @@ API_EXPORT void API_CALL mk_pusher_set_on_shutdown2(mk_pusher ctx, on_mk_push_ev
|
||||
MediaPusher::Ptr &obj = *((MediaPusher::Ptr *)ctx);
|
||||
std::shared_ptr<void> ptr(user_data, user_data_free ? user_data_free : [](void *) {});
|
||||
obj->getPoller()->async([obj, cb, ptr]() {
|
||||
// 切换线程再操作
|
||||
// 切换线程再操作 [AUTO-TRANSLATED:bae49fee]
|
||||
// Switch threads and then operate
|
||||
obj->setOnShutdown([cb, ptr](const SockException &ex) { cb(ptr.get(), ex.getErrCode(), ex.what()); });
|
||||
});
|
||||
}
|
||||
|
||||
@@ -37,7 +37,8 @@ API_EXPORT int API_CALL mk_flv_recorder_start(mk_flv_recorder ctx, const char *v
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////hls/mp4录制/////////////////////////////////////////////
|
||||
// /////////////////////////////////////////hls/mp4录制///////////////////////////////////////////// [AUTO-TRANSLATED:99c61c68]
|
||||
// /////////////////////////////////////////hls/mp4 recording/////////////////////////////////////////////
|
||||
|
||||
static inline bool isRecording(Recorder::type type, const string &vhost, const string &app, const string &stream_id){
|
||||
auto src = MediaSource::find(vhost, app, stream_id);
|
||||
|
||||
@@ -242,11 +242,13 @@ API_EXPORT uint16_t API_CALL mk_tcp_server_start(uint16_t port, mk_tcp_type type
|
||||
s_tcp_server[type]->start<SessionWithSSL<SessionForC> >(port);
|
||||
break;
|
||||
case mk_type_ws:
|
||||
//此处你也可以修改WebSocketHeader::BINARY
|
||||
// 此处你也可以修改WebSocketHeader::BINARY [AUTO-TRANSLATED:706abaab]
|
||||
// You can also modify WebSocketHeader::BINARY here
|
||||
s_tcp_server[type]->start<WebSocketSession<SessionForC, HttpSession, WebSocketHeader::TEXT> >(port);
|
||||
break;
|
||||
case mk_type_wss:
|
||||
//此处你也可以修改WebSocketHeader::BINARY
|
||||
// 此处你也可以修改WebSocketHeader::BINARY [AUTO-TRANSLATED:706abaab]
|
||||
// You can also modify WebSocketHeader::BINARY here
|
||||
s_tcp_server[type]->start<WebSocketSession<SessionForC, HttpsSession, WebSocketHeader::TEXT> >(port);
|
||||
break;
|
||||
default:
|
||||
@@ -307,10 +309,12 @@ TcpClientForC::Ptr *mk_tcp_client_create_l(mk_tcp_client_events *events, mk_tcp_
|
||||
case mk_type_ssl:
|
||||
return (TcpClientForC::Ptr *)new std::shared_ptr<SessionWithSSL<TcpClientForC> >(new SessionWithSSL<TcpClientForC>(events));
|
||||
case mk_type_ws:
|
||||
//此处你也可以修改WebSocketHeader::BINARY
|
||||
// 此处你也可以修改WebSocketHeader::BINARY [AUTO-TRANSLATED:706abaab]
|
||||
// You can also modify WebSocketHeader::BINARY here
|
||||
return (TcpClientForC::Ptr *)new std::shared_ptr<WebSocketClient<TcpClientForC, WebSocketHeader::TEXT, false> >(new WebSocketClient<TcpClientForC, WebSocketHeader::TEXT, false>(events));
|
||||
case mk_type_wss:
|
||||
//此处你也可以修改WebSocketHeader::BINARY
|
||||
// 此处你也可以修改WebSocketHeader::BINARY [AUTO-TRANSLATED:706abaab]
|
||||
// You can also modify WebSocketHeader::BINARY
|
||||
return (TcpClientForC::Ptr *)new std::shared_ptr<WebSocketClient<TcpClientForC, WebSocketHeader::TEXT, true> >(new WebSocketClient<TcpClientForC, WebSocketHeader::TEXT, true>(events));
|
||||
default:
|
||||
return nullptr;
|
||||
|
||||
@@ -134,7 +134,8 @@ API_EXPORT void API_CALL mk_timer_release(mk_timer ctx){
|
||||
class WorkThreadPoolForC : public TaskExecutorGetterImp {
|
||||
public:
|
||||
WorkThreadPoolForC(const char *name, size_t n_thread, int priority) {
|
||||
//最低优先级
|
||||
// 最低优先级 [AUTO-TRANSLATED:cd1f0dbc]
|
||||
// Lowest priority
|
||||
addPoller(name, n_thread, (ThreadPool::Priority) priority, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,8 @@ API_EXPORT mk_ini API_CALL mk_ini_default() {
|
||||
|
||||
static void emit_ini_file_reload(mk_ini ini) {
|
||||
if (ini == mk_ini_default()) {
|
||||
// 广播配置文件热加载
|
||||
// 广播配置文件热加载 [AUTO-TRANSLATED:86a0c1be]
|
||||
// Broadcast configuration hot reload
|
||||
NOTICE_EMIT(BroadcastReloadConfigArgs, Broadcast::kBroadcastReloadConfig);
|
||||
}
|
||||
}
|
||||
@@ -223,7 +224,8 @@ API_EXPORT void API_CALL mk_get_statistic(on_mk_get_statistic_cb func, void *use
|
||||
(*obj).emplace(prefix + pr.first, std::move(pr.second));
|
||||
}
|
||||
}
|
||||
// 触发回调
|
||||
// 触发回调 [AUTO-TRANSLATED:ae2ff258]
|
||||
// Trigger callback
|
||||
cb(*obj);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user