27 Star 140 Fork 91

OpenHarmony-SIG/ohos_ijkplayer
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
ijkplayer_napi.cpp 42.99 KB
一键复制 编辑 原始数据 按行查看 历史
wupingyuan 提交于 2024-10-26 13:16 +08:00 . 添加支持视频录制和截屏功能
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019
/*
* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ijkplayer_napi.h"
const int32_t STR_DEFAULT_SIZE = 2048;
const int32_t INDEX_0 = 0;
const int32_t INDEX_1 = 1;
const int32_t INDEX_2 = 2;
const int32_t INDEX_3 = 3;
const int32_t PARAM_COUNT_1 = 1;
const int32_t PARAM_COUNT_2 = 2;
const int32_t PARAM_COUNT_3 = 3;
const int32_t PARAM_COUNT_4 = 4;
OH_NativeXComponent_Callback IJKPlayerNapi::callback_;
std::unordered_map<std::string, IJKPlayerNapi *> IJKPlayerNapi::ijkPlayerNapi_;
std::string xcomponentId_;
bool destroyResource;
bool IJKPlayerNapi::gIsVideo = true;
struct CallbackContext {
napi_env env = nullptr;
napi_ref callbackRef = nullptr;
int what = 0;
int arg1 = 0;
int arg2 = 0;
char *obj;
};
struct RecordCallBackInfo {
napi_env env = nullptr;
napi_async_work asyncWork = nullptr;
napi_deferred deferred = nullptr;
napi_ref callbackRef = nullptr;
std::string xcomponentId;
int code;
};
struct GetCurrentFrameCallBackInfo {
napi_env env = nullptr;
napi_async_work asyncWork = nullptr;
napi_deferred deferred = nullptr;
napi_ref callbackRef = nullptr;
std::string xcomponentId;
std::string filePath;
int code;
};
void messageCallBack(int what, int arg1, int arg2, char *obj, std::string id)
{
LOGI("napi-->messageCallBack");
struct CallbackContext *context = new CallbackContext();
IJKPlayerNapi *instance = IJKPlayerNapi::getInstance(id);
context->env = instance->envMessage_;
uv_loop_s *loopMessage = nullptr;
napi_get_uv_event_loop(context->env, &loopMessage);
if (loopMessage == nullptr) {
LOGI("napi-->loopMessage null");
return;
}
uv_work_t *work = new (std::nothrow) uv_work_t;
if (work == nullptr) {
LOGI("napi-->work null");
return;
}
context->what = what;
context->arg1 = arg1;
context->arg2 = arg2;
context->obj = obj;
context->callbackRef = instance->callBackRefMessage_;
work->data = (void *)context;
uv_queue_work(
loopMessage, work, [](uv_work_t *work) {},
[](uv_work_t *work, int status) {
LOGI("napi-->uv_queue_work");
CallbackContext *context = static_cast<CallbackContext *>(work->data);
napi_value callback = nullptr;
napi_get_reference_value(context->env, context->callbackRef, &callback);
napi_value what_;
napi_value arg1_;
napi_value arg2_;
napi_value obj_;
napi_create_int32(context->env, context->what, &what_);
napi_create_int32(context->env, context->arg1, &arg1_);
napi_create_int32(context->env, context->arg2, &arg2_);
napi_value ret = 0;
if (context->obj) {
napi_create_string_utf8(context->env, context->obj, NAPI_AUTO_LENGTH, &obj_);
napi_value argv_4[] = {what_, arg1_, arg2_, obj_};
napi_call_function(context->env, nullptr, callback, PARAM_COUNT_4, argv_4, &ret);
} else {
napi_value argv_3[] = {what_, arg1_, arg2_};
napi_call_function(context->env, nullptr, callback, PARAM_COUNT_3, argv_3, &ret);
}
if (work != nullptr) {
delete work;
}
delete context;
LOGI("napi-->uv_queue_work end");
});
}
void post_event(int what, int arg1, int arg2, char *obj, std::string id)
{
LOGI("napi-->post_event-->what:%d", what);
messageCallBack(what, arg1, arg2, obj, id);
}
void setEnvMessage(const napi_env &env, std::string id)
{
IJKPlayerNapi::getInstance(id)->envMessage_ = env;
}
void setCallBackRefMessage(const napi_ref &callbackRef, std::string id)
{
IJKPlayerNapi::getInstance(id)->callBackRefMessage_ = callbackRef;
}
void setXComponentId(std::string &id) {
xcomponentId_ = id;
}
std::string IJKPlayerNapi::getXComponentId(napi_env env, napi_callback_info info)
{
LOGI("napi-->IJKPlayerNapi::getInstance_()->getXComponentId");
if (destroyResource && !xcomponentId_.empty()) {
return xcomponentId_;
}
napi_value exportInstance;
napi_value thisArg;
napi_status status;
OH_NativeXComponent *nativeXComponent = nullptr;
int32_t ret;
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {};
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
NAPI_CALL(env, napi_get_cb_info(env, info, NULL, NULL, &thisArg, NULL));
status = napi_get_named_property(env, thisArg, OH_NATIVE_XCOMPONENT_OBJ, &exportInstance);
if (status != napi_ok) {
LOGE("napi-->getXComponentId napi_get_named_property failed!");
return "";
};
status = napi_unwrap(env, exportInstance, reinterpret_cast<void **>(&nativeXComponent));
if (status != napi_ok) {
LOGE("napi-->getXComponentId napi_get_named_property failed!");
return "";
}
ret = OH_NativeXComponent_GetXComponentId(nativeXComponent, idStr, &idSize);
if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
LOGE("napi-->getXComponentId napi_get_named_property failed!");
return "";
}
std::string id(idStr);
LOGI("napi-->IJKPlayerNapi::getInstance_()->getXComponentId id:%s", (char *)id.c_str());
return id;
}
napi_value IJKPlayerNapi::setMessageListener(napi_env env, napi_callback_info info) {
LOGI("napi-->msg----setMessageListener");
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, NULL, NULL);
napi_value width;
napi_value height;
napi_value result = 0;
napi_value callback = args[1];
napi_ref callBackRefMessage_;
napi_create_reference(env, callback, 1, &callBackRefMessage_);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
setCallBackRefMessage(callBackRefMessage_, xcomponentId);
setEnvMessage(env, xcomponentId);
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->message_loop_callback(post_event);
return nullptr;
}
napi_value IJKPlayerNapi::native_setup(napi_env env, napi_callback_info info) {
LOGI("napi-->native_setup");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
LOGI("napi-->native_setup id->%s", (char *)xcomponentId.c_str());
setXComponentId(xcomponentId);
OH_NativeXComponent *xcomponent = IJKPlayerNapi::getInstance(xcomponentId)->getXComponent(xcomponentId);
void *nativeWindow = IJKPlayerNapi::getInstance(xcomponentId)->getNativeWindow(xcomponentId);
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_native_setup(xcomponent, nativeWindow);
return nullptr;
}
napi_value IJKPlayerNapi::native_setup_audio(napi_env env, napi_callback_info info) {
LOGI("napi-->native_setup");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
LOGI("napi-->native_setup id->%s", (char *)xcomponentId.c_str());
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_native_setup_audio();
return nullptr;
}
napi_value IJKPlayerNapi::setDataSource(napi_env env, napi_callback_info info) {
LOGI("napi-->setDataSource");
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string url;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, url);
LOGI("napi-->setDataSource-->url:%s", (char *)url.c_str());
LOGI("napi-->setDataSource end id->%s", (char *)xcomponentId.c_str());
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_setDataSource((char *)url.c_str());
return nullptr;
}
napi_value IJKPlayerNapi::setOption(napi_env env, napi_callback_info info) {
LOGI("napi-->setOption");
size_t argc = PARAM_COUNT_4;
napi_value args[PARAM_COUNT_4] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string category;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, category);
std::string key;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, key);
std::string value;
NapiUtil::JsValueToString(env, args[INDEX_3], STR_DEFAULT_SIZE, value);
LOGI("napi-->setOption-->category:%d,key:%s,value:%s", NapiUtil::StringToInt(category), (char *)key.c_str(), (char *)value.c_str());
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_setOption(NapiUtil::StringToInt(category), (char *)key.c_str(), (char *)value.c_str());
return nullptr;
}
napi_value IJKPlayerNapi::setOptionLong(napi_env env, napi_callback_info info) {
LOGI("napi-->setOptionLong");
size_t argc = PARAM_COUNT_4;
napi_value args[PARAM_COUNT_4] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string category;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, category);
std::string key;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, key);
std::string value;
NapiUtil::JsValueToString(env, args[INDEX_3], STR_DEFAULT_SIZE, value);
LOGI("napi-->setOptionLong-->category:%d,key:%s,value:%s", NapiUtil::StringToInt(category), (char *)key.c_str(), (char *)value.c_str());
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_setOptionLong(NapiUtil::StringToInt(category), (char *)key.c_str(), NapiUtil::StringToInt(value));
return nullptr;
}
napi_value IJKPlayerNapi::setVolume(napi_env env, napi_callback_info info) {
LOGI("napi-->setVolume");
size_t argc = PARAM_COUNT_3;
napi_value args[PARAM_COUNT_3] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string leftVolume;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, leftVolume);
std::string rightVolume;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, rightVolume);
LOGI("napi-->setVolume-->leftVolume:%s,rightVolume:%s", (char *)leftVolume.c_str(), (char *)rightVolume.c_str());
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_setVolume(NapiUtil::StringToFloat(leftVolume), NapiUtil::StringToFloat(rightVolume));
return nullptr;
}
napi_value IJKPlayerNapi::prepareAsync(napi_env env, napi_callback_info info) {
LOGI("napi-->prepareAsync");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_prepareAsync();
return nullptr;
}
napi_value IJKPlayerNapi::start(napi_env env, napi_callback_info info) {
LOGI("napi-->start");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_start();
return nullptr;
}
napi_value IJKPlayerNapi::stop(napi_env env, napi_callback_info info) {
LOGI("napi-->stop");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_stop();
return nullptr;
}
napi_value IJKPlayerNapi::pause(napi_env env, napi_callback_info info) {
LOGI("napi-->pause");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_pause();
return nullptr;
}
napi_value IJKPlayerNapi::reset(napi_env env, napi_callback_info info) {
LOGI("napi-->reset");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_reset();
return nullptr;
}
napi_value IJKPlayerNapi::release(napi_env env, napi_callback_info info) {
LOGI("napi-->release");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_release();
return nullptr;
}
napi_value IJKPlayerNapi::getDuration(napi_env env, napi_callback_info info) {
LOGI("napi-->getDuration");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
int duration = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getDuration();
return NapiUtil::SetNapiCallInt32(env, duration);
}
napi_value IJKPlayerNapi::getCurrentPosition(napi_env env, napi_callback_info info) {
LOGI("napi-->getCurrentPosition");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
int currentPosition =
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getCurrentPosition();
return NapiUtil::SetNapiCallInt32(env, currentPosition);
}
napi_value IJKPlayerNapi::seekTo(napi_env env, napi_callback_info info) {
LOGI("napi-->seekTo");
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string msec;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, msec);
LOGI("napi-->seekTo-->msec:%d", NapiUtil::StringToInt(msec));
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_seekTo(NapiUtil::StringToInt(msec));
return nullptr;
}
napi_value IJKPlayerNapi::isPlaying(napi_env env, napi_callback_info info) {
LOGI("napi-->isPlaying");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
return NapiUtil::SetNapiCallBool(env, IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_isPlaying());
}
napi_value IJKPlayerNapi::setPropertyFloat(napi_env env, napi_callback_info info) {
LOGI("napi-->setPropertyFloat");
size_t argc = PARAM_COUNT_3;
napi_value args[PARAM_COUNT_3] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string id;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, id);
std::string value;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, value);
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->ijkMediaPlayer_setPropertyFloat(NapiUtil::StringToInt(id), NapiUtil::StringToFloat(value));
return nullptr;
}
napi_value IJKPlayerNapi::getPropertyFloat(napi_env env, napi_callback_info info) {
LOGI("napi-->getPropertyFloat");
size_t argc = PARAM_COUNT_3;
napi_value args[PARAM_COUNT_3] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string id;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, id);
std::string value;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, value);
float result = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->ijkMediaPlayer_getPropertyFloat(NapiUtil::StringToInt(id), NapiUtil::StringToFloat(value));
napi_value napi_result;
napi_create_string_utf8(env, (char *)((std::to_string(result)).c_str()), NAPI_AUTO_LENGTH, &napi_result);
return napi_result;
}
napi_value IJKPlayerNapi::setPropertyLong(napi_env env, napi_callback_info info) {
LOGI("napi-->setPropertyLong");
size_t argc = PARAM_COUNT_3;
napi_value args[PARAM_COUNT_3] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string id;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, id);
std::string value;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, value);
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->ijkMediaPlayer_setPropertyLong(NapiUtil::StringToInt(id), NapiUtil::StringToLong(value));
return nullptr;
}
napi_value IJKPlayerNapi::getPropertyLong(napi_env env, napi_callback_info info) {
LOGI("napi-->getPropertyLong");
size_t argc = PARAM_COUNT_3;
napi_value args[PARAM_COUNT_3] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string id;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, id);
std::string value;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, value);
long result = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->ijkMediaPlayer_getPropertyLong(NapiUtil::StringToInt(id), NapiUtil::StringToLong(value));
napi_value napi_result;
napi_create_string_utf8(env, (char *)((std::to_string(result)).c_str()), NAPI_AUTO_LENGTH, &napi_result);
return napi_result;
}
napi_value IJKPlayerNapi::getAudioSessionId(napi_env env, napi_callback_info info) {
LOGI("napi-->getAudioSessionId");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
int getAudioSessionId = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getAudioSessionId();
return NapiUtil::SetNapiCallInt32(env, getAudioSessionId);
}
napi_value IJKPlayerNapi::setLoopCount(napi_env env, napi_callback_info info) {
LOGI("napi-->setLoopCount");
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string loop_count;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, loop_count);
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_setLoopCount(NapiUtil::StringToInt(loop_count));
return nullptr;
}
napi_value IJKPlayerNapi::getLoopCount(napi_env env, napi_callback_info info) {
LOGI("napi-->getLoopCount");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
int loop_count = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getLoopCount();
return NapiUtil::SetNapiCallInt32(env, loop_count);
}
napi_value IJKPlayerNapi::getVideoCodecInfo(napi_env env, napi_callback_info info) {
LOGI("napi-->getVideoCodecInfo");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
char *result = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getVideoCodecInfo();
if (result == nullptr) {
result = "";
}
LOGI("napi-->getVideoCodecInfo result:%s", result);
napi_value napi_result;
napi_create_string_utf8(env, result, NAPI_AUTO_LENGTH, &napi_result);
return napi_result;
}
napi_value IJKPlayerNapi::getAudioCodecInfo(napi_env env, napi_callback_info info) {
LOGI("napi-->getAudioCodecInfo");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
char *result = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getAudioCodecInfo();
if (result == nullptr) {
result = "";
}
napi_value napi_result;
napi_create_string_utf8(env, result, NAPI_AUTO_LENGTH, &napi_result);
return napi_result;
}
napi_value IJKPlayerNapi::setStreamSelected(napi_env env, napi_callback_info info) {
LOGI("napi-->setStreamSelected");
size_t argc = PARAM_COUNT_3;
napi_value args[PARAM_COUNT_3] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
std::string stream;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, stream);
std::string select;
NapiUtil::JsValueToString(env, args[INDEX_2], STR_DEFAULT_SIZE, select);
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->ijkMediaPlayer_setStreamSelected(NapiUtil::StringToInt(stream), NapiUtil::StringToBool(select));
return nullptr;
}
napi_value IJKPlayerNapi::getMediaMeta(napi_env env, napi_callback_info info) {
LOGI("napi-->getMediaMeta");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
HashMap map = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_getMediaMeta();
HashMapIterator iterator = hashmap_iterator(map);
std::string result = "";
while (hashmap_hasNext(iterator)) {
iterator = hashmap_next(iterator);
LOGI("napi-->getMediaMeta { key: %s, value: %s, hashcode: %d }\n",
(STRING)iterator->entry->key, (STRING)iterator->entry->value, iterator->hashCode);
result.append("key:");
result.append((STRING)iterator->entry->key);
result.append(",");
result.append("value:");
result.append((STRING)iterator->entry->value);
result.append(";");
}
hashmap_delete(map);
napi_value napi_result;
napi_create_string_utf8(env, (char *)(result.c_str()), NAPI_AUTO_LENGTH, &napi_result);
return napi_result;
}
napi_value IJKPlayerNapi::nativeOpenlog(napi_env env, napi_callback_info info) {
LOGI("napi-->nativeOpenlog");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_native_openlog();
return nullptr;
}
napi_value IJKPlayerNapi::JsConstructor(napi_env env, napi_callback_info info) {
LOGI("napi-->JsConstructor");
napi_value targetObj = nullptr;
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, &targetObj, nullptr);
std::string Id;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, Id);
bool isVideo;
napi_get_value_bool(env, args[INDEX_1], &isVideo);
gIsVideo = isVideo;
auto ijkplayer = getInstance(Id);
napi_wrap(
env, nullptr, ijkplayer,
[](napi_env env, void *data, void *hint) {
IJKPlayerNapi *bind = (IJKPlayerNapi *)data;
delete bind;
bind = nullptr;
},
nullptr, nullptr);
return targetObj;
}
napi_value IJKPlayerNapi::startRecord(napi_env env, napi_callback_info info)
{
LOGI("napi-->startRecord");
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
std::string filePath;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, filePath);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
int result = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_
->IjkMediaPlayer_startRecord(filePath.c_str());
return NapiUtil::SetNapiCallInt32(env, result);
}
napi_value IJKPlayerNapi::stopRecord(napi_env env, napi_callback_info info)
{
LOGI("napi-->stopRecord");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
napi_deferred deferred;
napi_value promise;
NAPI_CALL(env, napi_create_promise(env, &deferred, &promise));
RecordCallBackInfo *recordCallBackInfo = new RecordCallBackInfo{
.env = env,
.asyncWork = nullptr,
.deferred = deferred,
.xcomponentId = xcomponentId
};
napi_value resourceName;
napi_create_string_latin1(env, "stopRecord", NAPI_AUTO_LENGTH, &resourceName);
napi_create_async_work(
env, nullptr, resourceName,
[](napi_env env, void *data) {
RecordCallBackInfo *recordCallBackInfo = (RecordCallBackInfo *)data;
recordCallBackInfo->code = IJKPlayerNapi::getInstance(recordCallBackInfo->xcomponentId)
->ijkPlayerNapiProxy_->IjkMediaPlayer_stopRecord();
},
[](napi_env env, napi_status status, void *data) {
RecordCallBackInfo *recordCallBackInfo = (RecordCallBackInfo *)data;
napi_value result;
napi_create_int32(env, recordCallBackInfo->code, &result);
napi_resolve_deferred(recordCallBackInfo->env, recordCallBackInfo->deferred, result);
napi_delete_async_work(env, recordCallBackInfo->asyncWork);
delete recordCallBackInfo;
},
(void *)recordCallBackInfo, &recordCallBackInfo->asyncWork);
napi_queue_async_work(env, recordCallBackInfo->asyncWork);
return promise;
}
napi_value IJKPlayerNapi::isRecord(napi_env env, napi_callback_info info)
{
LOGI("napi-->isRecord");
size_t argc = PARAM_COUNT_1;
napi_value args[PARAM_COUNT_1] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
int result = IJKPlayerNapi::getInstance(xcomponentId)->ijkPlayerNapiProxy_->IjkMediaPlayer_isRecord();
return NapiUtil::SetNapiCallInt32(env, result);
}
napi_value IJKPlayerNapi::getCurrentFrame(napi_env env, napi_callback_info info)
{
LOGI("napi-->getCurrentFrame");
size_t argc = PARAM_COUNT_2;
napi_value args[PARAM_COUNT_2] = {nullptr};
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
std::string xcomponentId;
NapiUtil::JsValueToString(env, args[INDEX_0], STR_DEFAULT_SIZE, xcomponentId);
std::string filePath;
NapiUtil::JsValueToString(env, args[INDEX_1], STR_DEFAULT_SIZE, filePath);
if (xcomponentId == "") {
xcomponentId = IJKPlayerNapi::getXComponentId(env, info);
}
napi_deferred deferred;
napi_value promise;
NAPI_CALL(env, napi_create_promise(env, &deferred, &promise));
GetCurrentFrameCallBackInfo *getCurrentFrameCallBackInfo = new GetCurrentFrameCallBackInfo{
.env = env,
.asyncWork = nullptr,
.deferred = deferred,
.xcomponentId = xcomponentId,
.filePath = filePath
};
napi_value resourceName;
napi_create_string_latin1(env, "getCurrentFrame", NAPI_AUTO_LENGTH, &resourceName);
napi_create_async_work(
env, nullptr, resourceName,
[](napi_env env, void *data) {
GetCurrentFrameCallBackInfo *getCurrentFrameCallBackInfo = (GetCurrentFrameCallBackInfo *)data;
getCurrentFrameCallBackInfo->code = IJKPlayerNapi::getInstance(getCurrentFrameCallBackInfo->xcomponentId)
->ijkPlayerNapiProxy_->IjkMediaPlayer_getCurrentFrame(getCurrentFrameCallBackInfo->filePath.c_str());
sleep(1);
},
[](napi_env env, napi_status status, void *data) {
GetCurrentFrameCallBackInfo *getCurrentFrameCallBackInfo = (GetCurrentFrameCallBackInfo *)data;
napi_value result;
napi_create_int32(env, getCurrentFrameCallBackInfo->code, &result);
napi_resolve_deferred(getCurrentFrameCallBackInfo->env, getCurrentFrameCallBackInfo->deferred, result);
napi_delete_async_work(env, getCurrentFrameCallBackInfo->asyncWork);
delete getCurrentFrameCallBackInfo;
},
(void *)getCurrentFrameCallBackInfo, &getCurrentFrameCallBackInfo->asyncWork);
napi_queue_async_work(env, getCurrentFrameCallBackInfo->asyncWork);
return promise;
}
/////////////////////////////XComponent////////////////////////////////
void IJKPlayerNapi::setXComponentAndNativeWindow(std::string &id, OH_NativeXComponent *component, void *window) {
LOGI("napi-->IJKPlayerNapi::SetXComponentAndNativeWindow");
if (nativeXComponentMap_.find(id) == nativeXComponentMap_.end()) {
nativeXComponentMap_[id] = component;
} else {
if (nativeXComponentMap_[id] != component) {
nativeXComponentMap_[id] = component;
}
}
if (nativeWindowMap_.find(id) == nativeWindowMap_.end()) {
nativeWindowMap_[id] = window;
} else {
if (nativeWindowMap_[id] != window) {
nativeWindowMap_[id] = window;
}
}
}
OH_NativeXComponent *IJKPlayerNapi::getXComponent(std::string &id) {
LOGI("napi-->IJKPlayerNapi::getXComponent");
if (nativeXComponentMap_.find(id) == nativeXComponentMap_.end()) {
LOGI("napi-->IJKPlayerNapi::getXComponent null");
return nullptr;
} else {
LOGI("napi-->IJKPlayerNapi::getXComponent success");
return nativeXComponentMap_[id];
}
}
void *IJKPlayerNapi::getNativeWindow(std::string &id) {
LOGI("napi-->IJKPlayerNapi::getNativeWindow");
if (nativeWindowMap_.find(id) == nativeWindowMap_.end()) {
LOGI("napi-->IJKPlayerNapi::getNativeWindow null");
return nullptr;
} else {
LOGI("napi-->IJKPlayerNapi::getNativeWindow success");
return nativeWindowMap_[id];
}
}
void onSurfaceCreatedCB(OH_NativeXComponent *component, void *window) {
destroyResource = false;
LOGI("napi-->OnSurfaceCreatedCB");
int32_t ret;
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {};
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
ret = OH_NativeXComponent_GetXComponentId(component, idStr, &idSize);
if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
return;
}
LOGI("napi-->OnSurfaceCreatedCB-->success");
std::string id(idStr);
auto ijkplayerNapi = IJKPlayerNapi::getInstance(id);
ijkplayerNapi->onSurfaceCreated(component, window);
ijkplayerNapi->setXComponentAndNativeWindow(id, component, window);
}
void onSurfaceChangedCB(OH_NativeXComponent *component, void *window) {
LOGI("napi-->OnSurfaceChangedCB");
int32_t ret;
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {};
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
ret = OH_NativeXComponent_GetXComponentId(component, idStr, &idSize);
if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
return;
}
std::string id(idStr);
auto ijkplayerNapi = IJKPlayerNapi::getInstance(id);
ijkplayerNapi->onSurfaceChanged(component, window);
}
void onSurfaceDestroyedCB(OH_NativeXComponent *component, void *window) {
destroyResource = true;
LOGI("napi-->OnSurfaceDestroyedCB");
int32_t ret;
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {};
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
ret = OH_NativeXComponent_GetXComponentId(component, idStr, &idSize);
if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
return;
}
std::string id(idStr);
auto ijkplayerNapi = IJKPlayerNapi::getInstance(id);
ijkplayerNapi->ijkPlayerNapiProxy_->delete_media_player(id);
ijkplayerNapi->onSurfaceDestroyed(component, window);
}
void dispatchTouchEventCB(OH_NativeXComponent *component, void *window) {
LOGI("napi-->DispatchTouchEventCB");
int32_t ret;
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {};
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
ret = OH_NativeXComponent_GetXComponentId(component, idStr, &idSize);
if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
return;
}
std::string id(idStr);
auto ijkplayerNapi = IJKPlayerNapi::getInstance(id);
ijkplayerNapi->dispatchTouchEvent(component, window);
}
void IJKPlayerNapi::onSurfaceCreated(OH_NativeXComponent *component, void *window) {
LOGI("napi-->OnSurfaceCreated");
int32_t ret = OH_NativeXComponent_GetXComponentSize(component, window, &width_, &height_);
if (ret == OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
LOGI("napi-->OnSurfaceCreated-->success");
}
}
void IJKPlayerNapi::onSurfaceChanged(OH_NativeXComponent *component, void *window) {
LOGI("napi-->OnSurfaceChanged");
}
void IJKPlayerNapi::onSurfaceDestroyed(OH_NativeXComponent *component, void *window) {
LOGI("napi-->OnSurfaceDestroyed");
}
void IJKPlayerNapi::dispatchTouchEvent(OH_NativeXComponent *component, void *window) {
LOGI("napi-->DispatchTouchEvent");
int32_t ret = OH_NativeXComponent_GetTouchEvent(component, window, &touchEvent_);
if (ret == OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
LOGI("napi-->DispatchTouchEvent-->success");
}
}
IJKPlayerNapi::IJKPlayerNapi(std::string &id) : id_(id), component_(nullptr) {
LOGI("IJKPlayerNapi::IJKPlayerNapi");
ijkPlayerNapiProxy_ = new IJKPlayerNapiProxy(id);
if (gIsVideo) {
auto ijkplayerNapiCallback = IJKPlayerNapi::getNXComponentCallback();
ijkplayerNapiCallback->OnSurfaceCreated = onSurfaceCreatedCB;
ijkplayerNapiCallback->OnSurfaceChanged = onSurfaceChangedCB;
ijkplayerNapiCallback->OnSurfaceDestroyed = onSurfaceDestroyedCB;
ijkplayerNapiCallback->DispatchTouchEvent = dispatchTouchEventCB;
}
}
IJKPlayerNapi *IJKPlayerNapi::getInstance(std::string &id) {
LOGI("napi-->IJKPlayerNapi::getInstance");
if (ijkPlayerNapi_.find(id) == ijkPlayerNapi_.end()) {
LOGI("napi-->IJKPlayerNapi::getInstance create object");
IJKPlayerNapi *instance = new IJKPlayerNapi(id);
ijkPlayerNapi_[id] = instance;
return instance;
} else {
LOGI("napi-->IJKPlayerNapi::getInstance return");
return ijkPlayerNapi_[id];
}
}
OH_NativeXComponent_Callback *IJKPlayerNapi::getNXComponentCallback() {
LOGI("IJKPlayerNapi::getNXComponentCallback");
return &IJKPlayerNapi::callback_;
}
void IJKPlayerNapi::setNativeXComponent(OH_NativeXComponent *component) {
LOGI("IJKPlayerNapi::setNativeXComponent");
component_ = component;
OH_NativeXComponent_RegisterCallback(component_, &IJKPlayerNapi::callback_);
}
napi_value IJKPlayerNapi::Export(napi_env env, napi_value exports) {
LOGI("IJKPlayerNapi::Export");
napi_property_descriptor desc[] = {
DECLARE_NAPI_FUNCTION("_setDataSource", IJKPlayerNapi::setDataSource),
DECLARE_NAPI_FUNCTION("_setOption", IJKPlayerNapi::setOption),
DECLARE_NAPI_FUNCTION("_setOptionLong", IJKPlayerNapi::setOptionLong),
DECLARE_NAPI_FUNCTION("_prepareAsync", IJKPlayerNapi::prepareAsync),
DECLARE_NAPI_FUNCTION("_start", IJKPlayerNapi::start),
DECLARE_NAPI_FUNCTION("_stop", IJKPlayerNapi::stop),
DECLARE_NAPI_FUNCTION("_pause", IJKPlayerNapi::pause),
DECLARE_NAPI_FUNCTION("_reset", IJKPlayerNapi::reset),
DECLARE_NAPI_FUNCTION("_release", IJKPlayerNapi::release),
DECLARE_NAPI_FUNCTION("_seekTo", IJKPlayerNapi::seekTo),
DECLARE_NAPI_FUNCTION("_isPlaying", IJKPlayerNapi::isPlaying),
DECLARE_NAPI_FUNCTION("_setMessageListener", IJKPlayerNapi::setMessageListener),
DECLARE_NAPI_FUNCTION("_getDuration", IJKPlayerNapi::getDuration),
DECLARE_NAPI_FUNCTION("_getCurrentPosition", IJKPlayerNapi::getCurrentPosition),
DECLARE_NAPI_FUNCTION("_setPropertyFloat", IJKPlayerNapi::setPropertyFloat),
DECLARE_NAPI_FUNCTION("_getPropertyFloat", IJKPlayerNapi::getPropertyFloat),
DECLARE_NAPI_FUNCTION("_setPropertyLong", IJKPlayerNapi::setPropertyLong),
DECLARE_NAPI_FUNCTION("_getPropertyLong", IJKPlayerNapi::getPropertyLong),
DECLARE_NAPI_FUNCTION("_getAudioSessionId", IJKPlayerNapi::getAudioSessionId),
DECLARE_NAPI_FUNCTION("_setVolume", IJKPlayerNapi::setVolume),
DECLARE_NAPI_FUNCTION("_setLoopCount", IJKPlayerNapi::setLoopCount),
DECLARE_NAPI_FUNCTION("_getLoopCount", IJKPlayerNapi::getLoopCount),
DECLARE_NAPI_FUNCTION("_getVideoCodecInfo", IJKPlayerNapi::getVideoCodecInfo),
DECLARE_NAPI_FUNCTION("_getAudioCodecInfo", IJKPlayerNapi::getAudioCodecInfo),
DECLARE_NAPI_FUNCTION("_setStreamSelected", IJKPlayerNapi::setStreamSelected),
DECLARE_NAPI_FUNCTION("_getMediaMeta", IJKPlayerNapi::getMediaMeta),
DECLARE_NAPI_FUNCTION("_nativeOpenlog", IJKPlayerNapi::nativeOpenlog),
DECLARE_NAPI_FUNCTION("_native_setup", IJKPlayerNapi::native_setup),
DECLARE_NAPI_FUNCTION("_startRecord", IJKPlayerNapi::startRecord),
DECLARE_NAPI_FUNCTION("_stopRecord", IJKPlayerNapi::stopRecord),
DECLARE_NAPI_FUNCTION("_isRecord", IJKPlayerNapi::isRecord),
DECLARE_NAPI_FUNCTION("_getCurrentFrame", IJKPlayerNapi::getCurrentFrame),
};
NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
return exports;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony-sig/ohos_ijkplayer.git
git@gitee.com:openharmony-sig/ohos_ijkplayer.git
openharmony-sig
ohos_ijkplayer
ohos_ijkplayer
master

搜索帮助