mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-18 22:32:22 +08:00
@@ -30,10 +30,8 @@ static TcpServer::Ptr http_server[2];
|
||||
static TcpServer::Ptr shell_server;
|
||||
|
||||
#ifdef ENABLE_RTPPROXY
|
||||
#include "Rtp/UdpRecver.h"
|
||||
#include "Rtp/RtpSession.h"
|
||||
static std::shared_ptr<UdpRecver> udpRtpServer;
|
||||
static TcpServer::Ptr tcpRtpServer;
|
||||
#include "Rtp/RtpServer.h"
|
||||
static std::shared_ptr<RtpServer> rtpServer;
|
||||
#endif
|
||||
|
||||
//////////////////////////environment init///////////////////////////
|
||||
@@ -57,8 +55,7 @@ API_EXPORT void API_CALL mk_stop_all_server(){
|
||||
CLEAR_ARR(rtmp_server);
|
||||
CLEAR_ARR(http_server);
|
||||
#ifdef ENABLE_RTPPROXY
|
||||
udpRtpServer = nullptr;
|
||||
tcpRtpServer = nullptr;
|
||||
rtpServer = nullptr;
|
||||
#endif
|
||||
stopAllTcpServer();
|
||||
}
|
||||
@@ -119,6 +116,17 @@ API_EXPORT void API_CALL mk_set_option(const char *key, const char *val) {
|
||||
mINI::Instance()[key] = val;
|
||||
}
|
||||
|
||||
API_EXPORT const char * API_CALL mk_get_option(const char *key)
|
||||
{
|
||||
assert(key);
|
||||
if (mINI::Instance().find(key) == mINI::Instance().end()) {
|
||||
WarnL << "key:" << key << " not existed!";
|
||||
return nullptr;
|
||||
}
|
||||
return mINI::Instance()[key].data();
|
||||
}
|
||||
|
||||
|
||||
API_EXPORT uint16_t API_CALL mk_http_server_start(uint16_t port, int ssl) {
|
||||
ssl = MAX(0,MIN(ssl,1));
|
||||
try {
|
||||
@@ -173,18 +181,12 @@ 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 tcp服务器
|
||||
tcpRtpServer = std::make_shared<TcpServer>();
|
||||
tcpRtpServer->start<RtpSession>(port);
|
||||
|
||||
//创建rtp udp服务器
|
||||
auto ret = tcpRtpServer->getPort();
|
||||
udpRtpServer = std::make_shared<UdpRecver>();
|
||||
udpRtpServer->initSock(port);
|
||||
return ret;
|
||||
//创建rtp 服务器
|
||||
rtpServer = std::make_shared<RtpServer>();
|
||||
rtpServer->start(port);
|
||||
return rtpServer->getPort();
|
||||
} catch (std::exception &ex) {
|
||||
tcpRtpServer.reset();
|
||||
udpRtpServer.reset();
|
||||
rtpServer.reset();
|
||||
WarnL << ex.what();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -42,6 +42,12 @@ public:
|
||||
_on_seek = cb;
|
||||
_on_seek_data = user_data;
|
||||
}
|
||||
|
||||
void setOnRegist(on_mk_media_source_regist cb, void *user_data){
|
||||
_on_regist = cb;
|
||||
_on_regist_data = user_data;
|
||||
}
|
||||
|
||||
protected:
|
||||
// 通知其停止推流
|
||||
bool close(MediaSource &sender,bool force) override{
|
||||
@@ -70,12 +76,21 @@ protected:
|
||||
int totalReaderCount(MediaSource &sender) override{
|
||||
return _channel->totalReaderCount();
|
||||
}
|
||||
|
||||
void onRegist(MediaSource &sender, bool regist) override{
|
||||
if (_on_regist) {
|
||||
_on_regist(_on_regist_data, &sender, regist);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
DevChannel::Ptr _channel;
|
||||
on_mk_media_close _on_close = nullptr;
|
||||
on_mk_media_seek _on_seek = nullptr;
|
||||
on_mk_media_source_regist _on_regist = nullptr;
|
||||
void *_on_seek_data;
|
||||
void *_on_close_data;
|
||||
void *_on_regist_data;
|
||||
};
|
||||
|
||||
API_EXPORT void API_CALL mk_media_set_on_close(mk_media ctx, on_mk_media_close cb, void *user_data){
|
||||
@@ -90,6 +105,12 @@ API_EXPORT void API_CALL mk_media_set_on_seek(mk_media ctx, on_mk_media_seek cb,
|
||||
(*obj)->setOnSeek(cb, user_data);
|
||||
}
|
||||
|
||||
API_EXPORT void API_CALL mk_media_set_on_regist(mk_media ctx, on_mk_media_source_regist cb, void *user_data){
|
||||
assert(ctx);
|
||||
MediaHelper::Ptr *obj = (MediaHelper::Ptr *) ctx;
|
||||
(*obj)->setOnRegist(cb, user_data);
|
||||
}
|
||||
|
||||
API_EXPORT int API_CALL mk_media_total_reader_count(mk_media ctx){
|
||||
assert(ctx);
|
||||
MediaHelper::Ptr *obj = (MediaHelper::Ptr *) ctx;
|
||||
@@ -157,6 +178,16 @@ API_EXPORT void API_CALL mk_media_input_aac(mk_media ctx, void *data, int len, u
|
||||
(*obj)->getChannel()->inputAAC((char *) data, len, dts, (char *) adts);
|
||||
}
|
||||
|
||||
API_EXPORT void API_CALL mk_media_input_pcm(mk_media ctx, void *data , int len, uint32_t pts){
|
||||
#ifdef ENABLE_FAAC
|
||||
assert(ctx && data && len > 0);
|
||||
MediaHelper::Ptr* obj = (MediaHelper::Ptr*) ctx;
|
||||
(*obj)->getChannel()->inputPCM((char*)data, len, pts);
|
||||
#else
|
||||
WarnL << "aac编码未启用,该方法无效,编译时请打开ENABLE_FAAC选项";
|
||||
#endif //ENABLE_FAAC
|
||||
}
|
||||
|
||||
API_EXPORT void API_CALL mk_media_input_g711(mk_media ctx, void* data, int len, uint32_t dts){
|
||||
assert(ctx && data && len > 0);
|
||||
MediaHelper::Ptr* obj = (MediaHelper::Ptr*) ctx;
|
||||
|
||||
Reference in New Issue
Block a user