You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
5.2 KiB
138 lines
5.2 KiB
2 months ago
|
#pragma once
|
||
|
|
||
|
#include "../ZegoExpressDefines.h"
|
||
|
#include "../ZegoExpressEventHandler.h"
|
||
|
#include "../ZegoExpressInterface.h"
|
||
|
|
||
|
#include "ZegoInternalBase.h"
|
||
|
#include "ZegoInternalBridge.h"
|
||
|
|
||
|
ZEGO_DISABLE_DEPRECATION_WARNINGS
|
||
|
|
||
|
namespace ZEGO {
|
||
|
namespace EXPRESS {
|
||
|
|
||
|
class ZegoExpressMediaDataPublisherImp : public IZegoMediaDataPublisher {
|
||
|
public:
|
||
|
ZegoExpressMediaDataPublisherImp(zego_instance index) : instance_index_(index) {}
|
||
|
|
||
|
void addMediaFilePath(const std::string &path, bool is_clear) override {
|
||
|
oInternalOriginBridge->mediaDataPublisherAddMediaFilePath(path, is_clear, instance_index_);
|
||
|
}
|
||
|
|
||
|
void reset() override { oInternalOriginBridge->mediaDataPublisherReset(instance_index_); }
|
||
|
|
||
|
void setVideoSendDelayTime(int delayTime) override {
|
||
|
oInternalOriginBridge->mediaDataPublisherSetVideoSendDelayTime(delayTime, instance_index_);
|
||
|
}
|
||
|
|
||
|
void seekTo(unsigned long long millisecond) override {
|
||
|
oInternalOriginBridge->mediaDataPublisherSeekTo(millisecond, instance_index_);
|
||
|
}
|
||
|
|
||
|
unsigned long long getTotalDuration() override {
|
||
|
return oInternalOriginBridge->mediaDataPublisherGetTotalDuration(instance_index_);
|
||
|
}
|
||
|
|
||
|
unsigned long long getCurrentDuration() override {
|
||
|
return oInternalOriginBridge->mediaDataPublisherGetCurrentDuration(instance_index_);
|
||
|
}
|
||
|
|
||
|
int getIndex() override { return instance_index_; }
|
||
|
|
||
|
void setEventHandler(std::shared_ptr<IZegoMediaDataPublisherEventHandler> handler) override {
|
||
|
std::lock_guard<std::mutex> lock(media_data_publisher_mutex_);
|
||
|
media_data_publisher_event_handler = handler;
|
||
|
}
|
||
|
|
||
|
void zego_on_media_data_publisher_file_open(const char *path, zego_instance instance_index) {
|
||
|
ZEGO_UNUSED_VARIABLE(instance_index);
|
||
|
std::lock_guard<std::mutex> lock(media_data_publisher_mutex_);
|
||
|
if (media_data_publisher_event_handler) {
|
||
|
std::string file_path = "";
|
||
|
if (path) {
|
||
|
file_path = path;
|
||
|
}
|
||
|
|
||
|
auto weak_mdp_event_handler = std::weak_ptr<IZegoMediaDataPublisherEventHandler>(
|
||
|
media_data_publisher_event_handler);
|
||
|
ZEGO_SWITCH_THREAD_PRE
|
||
|
auto handler_in_main = weak_mdp_event_handler.lock();
|
||
|
if (handler_in_main) {
|
||
|
handler_in_main->onMediaDataPublisherFileOpen(this, file_path);
|
||
|
}
|
||
|
ZEGO_SWITCH_THREAD_ING
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void zego_on_media_data_publisher_file_close(zego_error error_code, const char *path,
|
||
|
zego_instance instance_index) {
|
||
|
ZEGO_UNUSED_VARIABLE(instance_index);
|
||
|
std::lock_guard<std::mutex> lock(media_data_publisher_mutex_);
|
||
|
if (media_data_publisher_event_handler) {
|
||
|
std::string file_path = "";
|
||
|
if (path) {
|
||
|
file_path = path;
|
||
|
}
|
||
|
|
||
|
auto weak_mdp_event_handler = std::weak_ptr<IZegoMediaDataPublisherEventHandler>(
|
||
|
media_data_publisher_event_handler);
|
||
|
ZEGO_SWITCH_THREAD_PRE
|
||
|
auto handler_in_main = weak_mdp_event_handler.lock();
|
||
|
if (handler_in_main) {
|
||
|
handler_in_main->onMediaDataPublisherFileClose(this, error_code, file_path);
|
||
|
}
|
||
|
ZEGO_SWITCH_THREAD_ING
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void zego_on_media_data_publisher_file_data_begin(const char *path,
|
||
|
zego_instance instance_index) {
|
||
|
ZEGO_UNUSED_VARIABLE(instance_index);
|
||
|
std::lock_guard<std::mutex> lock(media_data_publisher_mutex_);
|
||
|
if (media_data_publisher_event_handler) {
|
||
|
std::string file_path = "";
|
||
|
if (path) {
|
||
|
file_path = path;
|
||
|
}
|
||
|
|
||
|
auto weak_mdp_event_handler = std::weak_ptr<IZegoMediaDataPublisherEventHandler>(
|
||
|
media_data_publisher_event_handler);
|
||
|
ZEGO_SWITCH_THREAD_PRE
|
||
|
auto handler_in_main = weak_mdp_event_handler.lock();
|
||
|
if (handler_in_main) {
|
||
|
handler_in_main->onMediaDataPublisherFileDataBegin(this, file_path);
|
||
|
}
|
||
|
ZEGO_SWITCH_THREAD_ING
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void zego_on_media_data_publisher_file_data_end(const char *path,
|
||
|
zego_instance instance_index) {
|
||
|
std::lock_guard<std::mutex> lock(media_data_publisher_mutex_);
|
||
|
if (media_data_publisher_event_handler) {
|
||
|
std::string file_path = "";
|
||
|
if (path) {
|
||
|
file_path = path;
|
||
|
}
|
||
|
|
||
|
auto weak_mdp_event_handler = std::weak_ptr<IZegoMediaDataPublisherEventHandler>(
|
||
|
media_data_publisher_event_handler);
|
||
|
ZEGO_SWITCH_THREAD_PRE
|
||
|
auto handler_in_main = weak_mdp_event_handler.lock();
|
||
|
if (handler_in_main) {
|
||
|
handler_in_main->onMediaDataPublisherFileDataEnd(this, file_path);
|
||
|
}
|
||
|
ZEGO_SWITCH_THREAD_ING
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
std::shared_ptr<IZegoMediaDataPublisherEventHandler> media_data_publisher_event_handler;
|
||
|
std::mutex media_data_publisher_mutex_;
|
||
|
zego_instance instance_index_ = -1;
|
||
|
};
|
||
|
} // namespace EXPRESS
|
||
|
} // namespace ZEGO
|
||
|
|
||
|
ZEGO_ENABLE_DEPRECATION_WARNINGS
|