[*] 优化

This commit is contained in:
acgist
2024-05-11 15:12:23 +08:00
parent 0d446646d9
commit c7fc69be22
4 changed files with 18 additions and 14 deletions

View File

@@ -106,7 +106,7 @@ public:
public: public:
AudioCapturer(); AudioCapturer();
virtual ~AudioCapturer(); virtual ~AudioCapturer() override;
public: public:
virtual bool start() override; virtual bool start() override;
@@ -161,7 +161,7 @@ public:
public: public:
VideoCapturer(); VideoCapturer();
virtual ~VideoCapturer(); virtual ~VideoCapturer() override;
public: public:
void initVulkan(); void initVulkan();

View File

@@ -25,6 +25,7 @@ namespace acgist {
class Player { class Player {
protected: protected:
// 是否运行
bool running = false; bool running = false;
public: public:

View File

@@ -25,7 +25,7 @@ acgist::AudioCapturer::AudioCapturer() {
OH_AudioStreamBuilder_SetLatencyMode(this->builder, OH_AudioStream_LatencyMode::AUDIOSTREAM_LATENCY_MODE_NORMAL); OH_AudioStreamBuilder_SetLatencyMode(this->builder, OH_AudioStream_LatencyMode::AUDIOSTREAM_LATENCY_MODE_NORMAL);
OH_AudioStreamBuilder_SetSampleFormat(this->builder, OH_AudioStream_SampleFormat::AUDIOSTREAM_SAMPLE_S16LE); OH_AudioStreamBuilder_SetSampleFormat(this->builder, OH_AudioStream_SampleFormat::AUDIOSTREAM_SAMPLE_S16LE);
OH_LOG_DEBUG(LOG_APP, "配置音频采集参数:%d %d", acgist::samplingRate, acgist::channelCount); OH_LOG_DEBUG(LOG_APP, "配置音频采集参数:%d %d", acgist::samplingRate, acgist::channelCount);
// 设置采集回调 // 设置音频采集回调
OH_AudioCapturer_Callbacks callbacks; OH_AudioCapturer_Callbacks callbacks;
callbacks.OH_AudioCapturer_OnError = OnError; callbacks.OH_AudioCapturer_OnError = OnError;
callbacks.OH_AudioCapturer_OnReadData = OnReadData; callbacks.OH_AudioCapturer_OnReadData = OnReadData;

View File

@@ -1,7 +1,11 @@
#include "../include/Player.hpp" #include "../include/Player.hpp"
#include <mutex>
#include <hilog/log.h> #include <hilog/log.h>
static std::recursive_mutex audioMutex;
// 播放回调 // 播放回调
static int32_t OnError(OH_AudioRenderer* renderer, void* userData, OH_AudioStream_Result error); static int32_t OnError(OH_AudioRenderer* renderer, void* userData, OH_AudioStream_Result error);
static int32_t OnWriteData(OH_AudioRenderer* renderer, void* userData, void* buffer, int32_t length); static int32_t OnWriteData(OH_AudioRenderer* renderer, void* userData, void* buffer, int32_t length);
@@ -10,7 +14,7 @@ static int32_t OnInterruptEvent(OH_AudioRenderer* renderer, void* userData, OH_A
acgist::AudioPlayer::AudioPlayer() { acgist::AudioPlayer::AudioPlayer() {
OH_AudioStream_Result ret = OH_AudioStreamBuilder_Create(&this->builder, AUDIOSTREAM_TYPE_RENDERER); OH_AudioStream_Result ret = OH_AudioStreamBuilder_Create(&this->builder, AUDIOSTREAM_TYPE_RENDERER);
OH_LOG_INFO(LOG_APP, "构造音频构造器:%o", ret); OH_LOG_INFO(LOG_APP, "配置音频构造器:%o", ret);
// 配置音频播放参数 // 配置音频播放参数
OH_AudioStreamBuilder_SetSamplingRate(this->builder, acgist::samplingRate); OH_AudioStreamBuilder_SetSamplingRate(this->builder, acgist::samplingRate);
OH_AudioStreamBuilder_SetChannelCount(this->builder, acgist::channelCount); OH_AudioStreamBuilder_SetChannelCount(this->builder, acgist::channelCount);
@@ -18,14 +22,14 @@ acgist::AudioPlayer::AudioPlayer() {
OH_AudioStreamBuilder_SetEncodingType(this->builder, OH_AudioStream_EncodingType::AUDIOSTREAM_ENCODING_TYPE_RAW); OH_AudioStreamBuilder_SetEncodingType(this->builder, OH_AudioStream_EncodingType::AUDIOSTREAM_ENCODING_TYPE_RAW);
OH_AudioStreamBuilder_SetRendererInfo(this->builder, OH_AudioStream_Usage::AUDIOSTREAM_USAGE_MUSIC); OH_AudioStreamBuilder_SetRendererInfo(this->builder, OH_AudioStream_Usage::AUDIOSTREAM_USAGE_MUSIC);
OH_LOG_DEBUG(LOG_APP, "配置音频播放参数:%d %d", acgist::samplingRate, acgist::channelCount); OH_LOG_DEBUG(LOG_APP, "配置音频播放参数:%d %d", acgist::samplingRate, acgist::channelCount);
// 配置回调函数 // 配置音频播放回调
OH_AudioRenderer_Callbacks callbacks; OH_AudioRenderer_Callbacks callbacks;
callbacks.OH_AudioRenderer_OnError = OnError; callbacks.OH_AudioRenderer_OnError = OnError;
callbacks.OH_AudioRenderer_OnWriteData = OnWriteData; callbacks.OH_AudioRenderer_OnWriteData = OnWriteData;
callbacks.OH_AudioRenderer_OnStreamEvent = OnStreamEvent; callbacks.OH_AudioRenderer_OnStreamEvent = OnStreamEvent;
callbacks.OH_AudioRenderer_OnInterruptEvent = OnInterruptEvent; callbacks.OH_AudioRenderer_OnInterruptEvent = OnInterruptEvent;
ret = OH_AudioStreamBuilder_SetRendererCallback(this->builder, callbacks, this); ret = OH_AudioStreamBuilder_SetRendererCallback(this->builder, callbacks, this);
OH_LOG_DEBUG(LOG_APP, "设置播放回调函数%o", ret); OH_LOG_DEBUG(LOG_APP, "设置音频播放回调:%o", ret);
} }
acgist::AudioPlayer::~AudioPlayer() { acgist::AudioPlayer::~AudioPlayer() {
@@ -33,18 +37,19 @@ acgist::AudioPlayer::~AudioPlayer() {
if(this->builder != nullptr) { if(this->builder != nullptr) {
OH_AudioStream_Result ret = OH_AudioStreamBuilder_Destroy(this->builder); OH_AudioStream_Result ret = OH_AudioStreamBuilder_Destroy(this->builder);
this->builder = nullptr; this->builder = nullptr;
OH_LOG_INFO(LOG_APP, "释放音频播放%o", ret); OH_LOG_INFO(LOG_APP, "释放音频构造器%o", ret);
} }
} }
bool acgist::AudioPlayer::start() { bool acgist::AudioPlayer::start() {
std::lock_guard<std::recursive_mutex> audioLock(audioMutex);
if (this->running) { if (this->running) {
return true; return true;
} }
this->running = true; this->running = true;
// 构造音频播放器 // 配置音频播放器
OH_AudioStream_Result ret = OH_AudioStreamBuilder_GenerateRenderer(this->builder, &this->audioRenderer); OH_AudioStream_Result ret = OH_AudioStreamBuilder_GenerateRenderer(this->builder, &this->audioRenderer);
OH_LOG_DEBUG(LOG_APP, "构造音频播放器:%o", ret); OH_LOG_DEBUG(LOG_APP, "配置音频播放器:%o", ret);
// 开始音频播放 // 开始音频播放
ret = OH_AudioRenderer_Start(this->audioRenderer); ret = OH_AudioRenderer_Start(this->audioRenderer);
OH_LOG_DEBUG(LOG_APP, "开始音频播放:%o", ret); OH_LOG_DEBUG(LOG_APP, "开始音频播放:%o", ret);
@@ -52,13 +57,11 @@ bool acgist::AudioPlayer::start() {
} }
bool acgist::AudioPlayer::stop() { bool acgist::AudioPlayer::stop() {
std::lock_guard<std::recursive_mutex> audioLock(audioMutex);
if (!this->running) { if (!this->running) {
return true; return true;
} }
this->running = false; this->running = false;
if (this->audioRenderer == nullptr) {
return true;
}
// 停止音频播放 // 停止音频播放
OH_AudioStream_Result ret = OH_AudioRenderer_Stop(this->audioRenderer); OH_AudioStream_Result ret = OH_AudioRenderer_Stop(this->audioRenderer);
OH_LOG_DEBUG(LOG_APP, "停止音频播放:%o", ret); OH_LOG_DEBUG(LOG_APP, "停止音频播放:%o", ret);
@@ -75,7 +78,7 @@ static int32_t OnError(OH_AudioRenderer* renderer, void* userData, OH_AudioStrea
} }
static int32_t OnWriteData(OH_AudioRenderer* renderer, void* userData, void* buffer, int32_t length) { static int32_t OnWriteData(OH_AudioRenderer* renderer, void* userData, void* buffer, int32_t length) {
// TODO: 混音写入buffer // TODO: 多个需要混音写入buffer
return 0; return 0;
} }
@@ -85,6 +88,6 @@ static int32_t OnStreamEvent(OH_AudioRenderer* renderer, void* userData, OH_Audi
} }
static int32_t OnInterruptEvent(OH_AudioRenderer* renderer, void* userData, OH_AudioInterrupt_ForceType type, OH_AudioInterrupt_Hint hint) { static int32_t OnInterruptEvent(OH_AudioRenderer* renderer, void* userData, OH_AudioInterrupt_ForceType type, OH_AudioInterrupt_Hint hint) {
OH_LOG_DEBUG(LOG_APP, "音频播放打断%o %o", type, hint); OH_LOG_DEBUG(LOG_APP, "打断音频播放:%o %o", type, hint);
return 0; return 0;
} }