Improve:MediaBase module.

This commit is contained in:
Fancy code 2024-07-13 15:05:38 +08:00
parent cf7ac85f1f
commit 9ccc38c9e7
10 changed files with 53 additions and 11 deletions

View File

@ -66,7 +66,13 @@ bool MediaHandleState::MediaTaskFinishedHandle(VStateMachineData *msg)
LogInfo("response files = %d.\n", data->mData.mResponse.size());
std::vector<SyncFileInfo> files;
for (auto &response : data->mData.mResponse) {
SyncFileInfo file(data->mData.mSerialNumber, response.mFileName, 0, 0, 0, FileCreateType::END, FileStatus::END);
SyncFileInfo file(data->mData.mSerialNumber,
response.mFileName,
0,
response.mDuration_ms,
0,
FileCreateType::MANUAL_TEST,
FileStatus::FINISHED_RECORD);
files.push_back(file);
}
IFilesManager::GetInstance()->SaveFiles(files);

View File

@ -47,8 +47,9 @@ typedef struct media_report_event
} MediaReportEvent;
typedef struct media_task_response
{
media_task_response(const std::string &fileName);
media_task_response(const std::string &fileName, const unsigned int &duration_ms);
const std::string mFileName;
const unsigned int mDuration_ms;
} MediaTaskResponse;
class VMediaTask
{

View File

@ -22,7 +22,8 @@ media_report_event::media_report_event(const std::string &fileName, const MediaC
: mFileName(fileName), mMediaChannedl(mediaChannedl)
{
}
media_task_response::media_task_response(const std::string &fileName) : mFileName(fileName)
media_task_response::media_task_response(const std::string &fileName, const unsigned int &duration_ms)
: mFileName(fileName), mDuration_ms(duration_ms)
{
}
const MediaTaskType VMediaTask::GetTaskType(void)

View File

@ -22,6 +22,7 @@
#include <cstring>
#include <memory>
#include <mutex>
#include <string.h>
#include <string>
#include <utility>
#include <vector>
@ -37,8 +38,14 @@ StatusCode RecordMp4::Init(void)
return CreateStatusCode(STATUS_CODE_NOT_OK);
}
std::string videoPath = mRecordTask->GetTargetNameForSaving();
OutputFileInfo fileInfo = {
.mFileName = videoPath.c_str(), .mDuration_ms = 5000, .mFinished = &mIsRecordingFinished};
OutputFileInfo fileInfo = {.mDuration_ms = 5000, .mFinished = &mIsRecordingFinished};
if (OUTPUT_FILE_NAME_MAX >= videoPath.size()) {
memcpy(fileInfo.mFileName, videoPath.c_str(), videoPath.size());
}
else {
LogError("VideoPath is too long.\n");
return CreateStatusCode(STATUS_CODE_NOT_OK);
}
StatusCode code = IOpenOutputFile(mRecordMp4Object, &fileInfo);
if (!IsCodeOK(code)) {
LogError("OpenOutputFile failed.\n");
@ -57,13 +64,14 @@ void RecordMp4::StopHandleStream(void)
{
std::lock_guard<std::mutex> locker(mMutex);
if (mRecordMp4Object) {
OutputFileInfo finalFile = IGetOutputFileInfo(mRecordMp4Object);
MediaTaskResponse response(finalFile.mFileName, finalFile.mDuration_ms);
mTaskResponse.push_back(response);
ICloseOutputFile(mRecordMp4Object);
IMediaBaseFree(mRecordMp4Object);
mRecordMp4Object = nullptr;
}
std::string videoPath = mRecordTask->GetTargetNameForSaving();
MediaTaskResponse response(videoPath.c_str());
mTaskResponse.push_back(response);
// std::string videoPath = mRecordTask->GetTargetNameForSaving();
}
void RecordMp4::GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp)
{

View File

@ -48,11 +48,12 @@ enum OutputFileStatus
OUTPUT_FILE_STATUS_FINISHED,
OUTPUT_FILE_STATUS_END
};
#define OUTPUT_FILE_NAME_MAX 256
typedef struct output_file_info
{
const char *mFileName; ///< Name of the output file. Must be an absolute path.
const unsigned int mDuration_ms; ///< Duration of the output file in milliseconds.
int *const mFinished; ///< Whether the output file is finished. See OutputFileStatus.
char mFileName[OUTPUT_FILE_NAME_MAX]; ///< Name of the output file. Must be an absolute path.
const unsigned int mDuration_ms; ///< Duration of the output file in milliseconds.
int *const mFinished; ///< Whether the output file is finished. See OutputFileStatus.
} OutputFileInfo;
typedef void (*ReadVideoFileCallback)(const void *, const unsigned int, const unsigned long long, void *);
typedef void (*ReadAudioFileCallback)(const void *, const unsigned int, const unsigned long long, void *);
@ -68,6 +69,7 @@ StatusCode IStopReadFile(void *object);
StatusCode IOpenOutputFile(void *object, const OutputFileInfo *info);
StatusCode ICloseOutputFile(void *object);
void IGetStreamData(void *object, const void *data, const size_t size, const StreamInfo streamInfo);
OutputFileInfo IGetOutputFileInfo(void *object);
void IMediaBaseFree(void *object);
#ifdef __cplusplus

View File

@ -34,6 +34,7 @@ extern "C" {
#include <functional>
#include <memory>
// #include <mutex>
#include <string.h>
#include <string>
constexpr unsigned long long MUXING_NOT_START = 0;
FfmpegMuxStreamV2::FfmpegMuxStreamV2()
@ -95,6 +96,13 @@ void FfmpegMuxStreamV2::GetStreamData(const void *data, const size_t &size, cons
mAudioStream->WriteSourceData(data, size, streamInfo.mTimeStamp_us);
}
}
OutputFileInfo FfmpegMuxStreamV2::GetOutputFileInfo(void)
{
OutputFileInfo finalFile = {.mDuration_ms = static_cast<unsigned int>(mFileMuxingDuration_us / 1000),
.mFinished = nullptr};
memcpy(finalFile.mFileName, mOutputFileInfo->mFileName, OUTPUT_FILE_NAME_MAX);
return finalFile;
}
StatusCode inline FfmpegMuxStreamV2::OpenMuxOutputFile(const std::string &fileName)
{
AVDictionary *opt = nullptr;

View File

@ -48,6 +48,7 @@ public: // About combine file.
StatusCode OpenOutputFile(const OutputFileInfo &fileInfo) override;
StatusCode CloseOutputFile(void) override;
void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo) override;
OutputFileInfo GetOutputFileInfo(void) override;
private:
StatusCode OpenMuxOutputFile(const std::string &fileName);

View File

@ -54,6 +54,12 @@ StatusCode IMediaBase::CloseOutputFile(void)
void IMediaBase::GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo)
{
}
OutputFileInfo IMediaBase::GetOutputFileInfo(void)
{
LogWarning("STATUS_CODE_VIRTUAL_FUNCTION\n");
OutputFileInfo info = {.mFileName = {0}, .mDuration_ms = 0, .mFinished = nullptr};
return info;
}
static const char *MEDIA_BASE_NAME = "media_adapter";
const char *GetMediaBaseModuleName(void)
{

View File

@ -32,6 +32,7 @@ public: // About combine file.
virtual StatusCode OpenOutputFile(const OutputFileInfo &fileInfo);
virtual StatusCode CloseOutputFile(void);
virtual void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo);
virtual OutputFileInfo GetOutputFileInfo(void);
};
typedef struct media_base_header
{

View File

@ -84,6 +84,14 @@ void IGetStreamData(void *object, const void *data, const size_t size, const Str
(*(std::shared_ptr<IMediaBase> *)object)->GetStreamData(data, size, streamInfo);
}
}
OutputFileInfo IGetOutputFileInfo(void *object)
{
if (ObjectCheck(object) == true) {
return (*(std::shared_ptr<IMediaBase> *)object)->GetOutputFileInfo();
}
OutputFileInfo info = {.mFileName = {0}, .mDuration_ms = 0, .mFinished = nullptr};
return info;
}
void IMediaBaseFree(void *object)
{
if (ObjectCheck(object) == true) {