From 8f5cb5547997f87881d92d742cb550e3aac1cf84 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Mon, 6 May 2024 08:58:29 +0800 Subject: [PATCH] =?UTF-8?q?[*]=20=E9=9F=B3=E9=A2=91=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taoyao/media/src/main/cpp/CMakeLists.txt | 1 + .../media/src/main/cpp/include/Capturer.hpp | 15 ++++++++++-- .../media/src/main/cpp/include/Palyer.hpp | 4 +++- .../src/main/cpp/media/AudioCapturer.cpp | 21 +++++++++------- .../src/main/cpp/media/VideoCapturer.cpp | 8 +++++++ .../taoyao/media/src/main/module.json5 | 24 +++++++++++++++++++ 6 files changed, 61 insertions(+), 12 deletions(-) diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/CMakeLists.txt b/taoyao-client-openharmony/taoyao/media/src/main/cpp/CMakeLists.txt index 252bb16..ec45a49 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/CMakeLists.txt +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/CMakeLists.txt @@ -61,6 +61,7 @@ target_link_libraries( libhilog_ndk.z.so # 媒体 libohaudio.so + libohcamera.so libnative_media_aenc.so libnative_media_venc.so libnative_media_core.so diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Capturer.hpp b/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Capturer.hpp index 27d289e..e7a67f0 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Capturer.hpp +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Capturer.hpp @@ -5,8 +5,10 @@ * * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/audio-encoding.md * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/video-encoding.md + * https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/media/avscreen-capture.md * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/obtain-supported-codecs.md - * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/using-ohaudio-for-recording.md + * https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/camera/native-camera-recording.md + * https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/audio/using-ohaudio-for-recording.md * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/native-lib/third_party_opengl/opengles.md * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/native-lib/third_party_opensles/opensles.md */ @@ -16,6 +18,9 @@ #include +#include "ohcamera/camera.h" +#include "ohcamera/video_output.h" + #include "api/media_stream_track.h" #include @@ -57,7 +62,6 @@ public: // 音频采集器 OH_AudioCapturer* audioCapturer = nullptr; - public: AudioCapturer(); virtual ~AudioCapturer(); @@ -73,6 +77,13 @@ public: */ class VideoCapturer: public Capturer> { +public: + Camera_Device* camera_Device; + Camera_Manager* camera_Manager; + Camera_VideoOutput* camera_VideoOutput; + Camera_VideoProfile* camera_VideoProfile; + Camera_OutputCapability* camera_OutputCapability; + public: VideoCapturer(); virtual ~VideoCapturer(); diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Palyer.hpp b/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Palyer.hpp index 67c1e6a..06c8ee9 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Palyer.hpp +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/include/Palyer.hpp @@ -1,7 +1,9 @@ /** * 播放器 * - * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/using-ohaudio-for-playback.md + * https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/media/video-playback.md + * https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/audio/audio-playback-overview.md + * https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/media/media/using-ndk-avplayer-for-playerback.md */ #ifndef TAOYAO_PALYER_H diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/AudioCapturer.cpp b/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/AudioCapturer.cpp index 9ddc753..21ee1ad 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/AudioCapturer.cpp +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/AudioCapturer.cpp @@ -4,9 +4,6 @@ #include "rtc_base/time_utils.h" -#include -#include - // 采样率 static int32_t samplingRate = 48000; // 声道数 @@ -16,8 +13,8 @@ static OH_AudioStream_LatencyMode latencyMode = OH_AudioStream_LatencyMode::AU // 音频格式 static OH_AudioStream_SampleFormat sampleFormat = OH_AudioStream_SampleFormat::AUDIOSTREAM_SAMPLE_S16LE; -static int32_t OnReadData(OH_AudioCapturer* capturer, void* userData, void* buffer, int32_t length); static int32_t OnError(OH_AudioCapturer* capturer, void* userData, OH_AudioStream_Result error); +static int32_t OnReadData(OH_AudioCapturer* capturer, void* userData, void* buffer, int32_t length); static int32_t OnStreamEvent(OH_AudioCapturer* capturer, void* userData, OH_AudioStream_Event event); static int32_t OnInterruptEvent(OH_AudioCapturer* capturer, void* userData, OH_AudioInterrupt_ForceType type, OH_AudioInterrupt_Hint hint); @@ -42,8 +39,8 @@ bool acgist::AudioCapturer::start() { OH_LOG_DEBUG(LOG_APP, "配置音频格式:%d %d %o %o", samplingRate, channelCount, latencyMode, sampleFormat); // 设置回调函数 OH_AudioCapturer_Callbacks callbacks; - callbacks.OH_AudioCapturer_OnReadData = OnReadData; callbacks.OH_AudioCapturer_OnError = OnError; + callbacks.OH_AudioCapturer_OnReadData = OnReadData; callbacks.OH_AudioCapturer_OnStreamEvent = OnStreamEvent; callbacks.OH_AudioCapturer_OnInterruptEvent = OnInterruptEvent; OH_AudioStream_Result ret = OH_AudioStreamBuilder_SetCapturerCallback(builder, callbacks, this); @@ -54,6 +51,7 @@ bool acgist::AudioCapturer::start() { // 开始录制 ret = OH_AudioCapturer_Start(audioCapturer); OH_LOG_DEBUG(LOG_APP, "开始录制:%o", ret); + return ret == OH_AudioStream_Result::AUDIOSTREAM_SUCCESS; } bool acgist::AudioCapturer::stop() { @@ -64,6 +62,12 @@ bool acgist::AudioCapturer::stop() { ret = OH_AudioCapturer_Release(audioCapturer); audioCapturer = nullptr; OH_LOG_DEBUG(LOG_APP, "释放音频采集器:%o", ret); + return ret == OH_AudioStream_Result::AUDIOSTREAM_SUCCESS; +} + +static int32_t OnError(OH_AudioCapturer* capturer, void* userData, OH_AudioStream_Result error) { + OH_LOG_ERROR(LOG_APP, "音频采集发生异常:%o", error); + return 0; } static int32_t OnReadData(OH_AudioCapturer* capturer, void* userData, void* buffer, int32_t length) { @@ -76,16 +80,15 @@ static int32_t OnReadData(OH_AudioCapturer* capturer, void* userData, void* buff ) { iterator->second->OnData(buffer, 16, samplingRate, channelCount, sizeof(buffer) / 2, timeMillis); } -} - -static int32_t OnError(OH_AudioCapturer* capturer, void* userData, OH_AudioStream_Result error) { - OH_LOG_ERROR(LOG_APP, "音频采集发生异常:%o", error); + return 0; } static int32_t OnStreamEvent(OH_AudioCapturer* capturer, void* userData, OH_AudioStream_Event event) { OH_LOG_DEBUG(LOG_APP, "音频采集事件:%o", event); + return 0; } static int32_t OnInterruptEvent(OH_AudioCapturer* capturer, void* userData, OH_AudioInterrupt_ForceType type, OH_AudioInterrupt_Hint hint) { OH_LOG_DEBUG(LOG_APP, "音频采集打断:%o %o", type, hint); + return 0; } diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/VideoCapturer.cpp b/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/VideoCapturer.cpp index e69de29..6d5efe5 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/VideoCapturer.cpp +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/VideoCapturer.cpp @@ -0,0 +1,8 @@ +#include "../include/Capturer.hpp" + +#include "hilog/log.h" +#include "ohcamera/camera_input.h" +#include "ohcamera/camera_manager.h" +#include "ohcamera/capture_session.h" + + diff --git a/taoyao-client-openharmony/taoyao/media/src/main/module.json5 b/taoyao-client-openharmony/taoyao/media/src/main/module.json5 index 20f8a19..508e731 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/module.json5 +++ b/taoyao-client-openharmony/taoyao/media/src/main/module.json5 @@ -36,18 +36,42 @@ "requestPermissions": [ { "name": "ohos.permission.CAMERA", + "reason": "视频", "usedScene": { "when": "always" } }, { "name": "ohos.permission.INTERNET", + "reason": "网络", "usedScene": { "when": "always" } }, { "name": "ohos.permission.MICROPHONE", + "reason": "音频", + "usedScene": { + "when": "always" + } + }, + { + "name": "ohos.permission.READ_MEDIA", + "reason": "录制文件", + "usedScene": { + "when": "always" + } + }, + { + "name": "ohos.permission.WRITE_MEDIA", + "reason": "录制文件", + "usedScene": { + "when": "always" + } + }, + { + "name": "ohos.permission.MEDIA_LOCATION", + "reason": "地理位置", "usedScene": { "when": "always" }