feat: add mk_load_mp4_file c api(#3964)
Some checks are pending
Android / build (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
Docker / build (push) Waiting to run
Linux / build (push) Waiting to run
macOS / build (push) Waiting to run
Windows / build (push) Waiting to run

Co-authored-by: lidaofu <lidf@ahtelit.com>
Co-authored-by: xia-chu <771730766@qq.com>
This commit is contained in:
Lidaofu 2024-10-18 21:48:42 +08:00 committed by GitHub
parent 61a93fab6a
commit fdbf77d46d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 0 deletions

View File

@ -12,6 +12,7 @@
#define MK_RECORDER_API_H_ #define MK_RECORDER_API_H_
#include "mk_common.h" #include "mk_common.h"
#include "mk_util.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -124,6 +125,18 @@ API_EXPORT int API_CALL mk_recorder_start(int type, const char *vhost, const cha
*/ */
API_EXPORT int API_CALL mk_recorder_stop(int type, const char *vhost, const char *app, const char *stream); API_EXPORT int API_CALL mk_recorder_stop(int type, const char *vhost, const char *app, const char *stream);
/**
* mp4列表
* @param vhost
* @param app app
* @param stream id
* @param file_path
* @param file_repeat
* @param ini
*/
API_EXPORT void API_CALL mk_load_mp4_file(const char *vhost, const char *app, const char *stream, const char *file_path, int file_repeat);
API_EXPORT void API_CALL mk_load_mp4_file2(const char *vhost, const char *app, const char *stream, const char *file_path, int file_repeat, mk_ini ini);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -11,6 +11,7 @@
#include "mk_recorder.h" #include "mk_recorder.h"
#include "Rtmp/FlvMuxer.h" #include "Rtmp/FlvMuxer.h"
#include "Record/Recorder.h" #include "Record/Recorder.h"
#include "Record/MP4Reader.h"
using namespace std; using namespace std;
using namespace toolkit; using namespace toolkit;
@ -83,3 +84,36 @@ API_EXPORT int API_CALL mk_recorder_stop(int type, const char *vhost, const char
assert(vhost && app && stream); assert(vhost && app && stream);
return stopRecord((Recorder::type)type,vhost,app,stream); return stopRecord((Recorder::type)type,vhost,app,stream);
} }
API_EXPORT void API_CALL mk_load_mp4_file(const char *vhost, const char *app, const char *stream, const char *file_path, int file_repeat) {
mINI ini;
mk_load_mp4_file2(vhost, app, stream, file_path, file_repeat, (mk_ini)&ini);
}
API_EXPORT void API_CALL mk_load_mp4_file2(const char *vhost, const char *app, const char *stream, const char *file_path, int file_repeat, mk_ini ini) {
#if ENABLE_MP4
assert(vhost && app && stream && file_path && ini);
ProtocolOption option(*((mINI *)ini));
// mp4支持多track [AUTO-TRANSLATED:b9688762]
// mp4 supports multiple tracks
option.max_track = 16;
// 默认解复用mp4不生成mp4 [AUTO-TRANSLATED:11f2dcee]
// By default, demultiplexing mp4 does not generate mp4
option.enable_mp4 = false;
// 但是如果参数明确指定开启mp4, 那么也允许之 [AUTO-TRANSLATED:b143a9e3]
// But if the parameter explicitly specifies to enable mp4, then it is also allowed
// 强制无人观看时自动关闭 [AUTO-TRANSLATED:f7c85948]
// Force automatic shutdown when no one is watching
option.auto_close = true;
MediaTuple tuple = { vhost, app, stream, "" };
auto reader = std::make_shared<MP4Reader>(tuple, file_path, option);
// sample_ms设置为0从配置文件加载file_repeat可以指定如果配置文件也指定循环解复用那么强制开启 [AUTO-TRANSLATED:23e826b4]
// sample_ms is set to 0, loaded from the configuration file; file_repeat can be specified, if the configuration file also specifies loop demultiplexing,
// then force it to be enabled
reader->startReadMP4(0, true, file_repeat);
#else
WarnL << "MP4-related features are disabled. Please enable the ENABLE_MP4 macro and recompile.";
#endif
}