• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <cstdint>
17 #include <string>
18 #include "webview_javascript_execute_callback.h"
19 #include "webview_javascript_result_callback.h"
20 #include "native_arkweb_utils.h"
21 #include "native_interface_arkweb.h"
22 #include "cj_common_ffi.h"
23 #include "ffi_remote_data.h"
24 #include "application_context.h"
25 #include "webview_log.h"
26 #include "webview_utils.h"
27 #include "nweb_store_web_archive_callback.h"
28 #include "web_native_media_player.h"
29 #include "web_runtime_delegate.h"
30 
31 namespace OHOS::Webview {
32 
NativeMediaPlayerHandlerImpl(int32_t nwebId,std::shared_ptr<NWeb::NWebNativeMediaPlayerHandler> handler)33 NativeMediaPlayerHandlerImpl::NativeMediaPlayerHandlerImpl(
34     int32_t nwebId, std::shared_ptr<NWeb::NWebNativeMediaPlayerHandler> handler)
35     : nwebId_(nwebId), handler_(handler) {}
36 
HandleVideoSizeChanged(double width,double height)37 void NativeMediaPlayerHandlerImpl::HandleVideoSizeChanged(double width, double height)
38 {
39     if (handler_) {
40         handler_->HandleVideoSizeChanged(width, height);
41     } else {
42         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleVideoSizeChanged is null");
43     }
44 }
45 
HandleError(NWeb::MediaError error,const char * errorMessage)46 void NativeMediaPlayerHandlerImpl::HandleError(NWeb::MediaError error, const char* errorMessage)
47 {
48     if (handler_) {
49         handler_->HandleError(error, errorMessage);
50     } else {
51         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleError is null");
52     }
53 }
54 
HandleSeekFinished()55 void NativeMediaPlayerHandlerImpl::HandleSeekFinished()
56 {
57     if (handler_) {
58         handler_->HandleSeekFinished();
59     } else {
60         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleSeekFinished is null");
61     }
62 }
63 
HandleSeeking()64 void NativeMediaPlayerHandlerImpl::HandleSeeking()
65 {
66     if (handler_) {
67         handler_->HandleSeeking();
68     } else {
69         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleSeeking is null");
70     }
71 }
72 
HandleFullScreenChanged(bool fullscreen)73 void NativeMediaPlayerHandlerImpl::HandleFullScreenChanged(bool fullscreen)
74 {
75     if (handler_) {
76         handler_->HandleFullScreenChanged(fullscreen);
77     } else {
78         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleFullScreenChanged is null");
79     }
80 }
81 
HandleReadyStateChanged(NWeb::ReadyState state)82 void NativeMediaPlayerHandlerImpl::HandleReadyStateChanged(NWeb::ReadyState state)
83 {
84     if (handler_) {
85         handler_->HandleReadyStateChanged(state);
86     } else {
87         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleReadyStateChanged is null");
88     }
89 }
90 
HandleNetworkStateChanged(NWeb::NetworkState state)91 void NativeMediaPlayerHandlerImpl::HandleNetworkStateChanged(NWeb::NetworkState state)
92 {
93     if (handler_) {
94         handler_->HandleNetworkStateChanged(state);
95     } else {
96         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleNetworkStateChanged is null");
97     }
98 }
99 
HandleEnded()100 void NativeMediaPlayerHandlerImpl::HandleEnded()
101 {
102     if (handler_) {
103         handler_->HandleEnded();
104     } else {
105         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleEnded is null");
106     }
107 }
108 
HandleBufferedEndTimeChanged(double bufferedEndTime)109 void NativeMediaPlayerHandlerImpl::HandleBufferedEndTimeChanged(double bufferedEndTime)
110 {
111     if (handler_) {
112         handler_->HandleBufferedEndTimeChanged(bufferedEndTime);
113     } else {
114         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleBufferedEndTimeChanged is null");
115     }
116 }
117 
HandleTimeUpdate(double playTime)118 void NativeMediaPlayerHandlerImpl::NativeMediaPlayerHandlerImpl::HandleTimeUpdate(double playTime)
119 {
120     if (handler_) {
121         handler_->HandleTimeUpdate(playTime);
122     } else {
123         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleTimeUpdate is null");
124     }
125 }
126 
HandleDurationChanged(double duration)127 void NativeMediaPlayerHandlerImpl::HandleDurationChanged(double duration)
128 {
129     if (handler_) {
130         handler_->HandleDurationChanged(duration);
131     } else {
132         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleDurationChanged is null");
133     }
134 }
135 
HandlePlaybackRateChanged(double playbackRate)136 void NativeMediaPlayerHandlerImpl::HandlePlaybackRateChanged(double playbackRate)
137 {
138     if (handler_) {
139         handler_->HandlePlaybackRateChanged(playbackRate);
140     } else {
141         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandlePlaybackRateChanged is null");
142     }
143 }
144 
HandleMutedChanged(bool muted)145 void NativeMediaPlayerHandlerImpl::HandleMutedChanged(bool muted)
146 {
147     if (handler_) {
148         handler_->HandleMutedChanged(muted);
149     } else {
150         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleMutedChanged is null");
151     }
152 }
153 
HandleVolumeChanged(double volume)154 void NativeMediaPlayerHandlerImpl::HandleVolumeChanged(double volume)
155 {
156     if (handler_) {
157         handler_->HandleVolumeChanged(volume);
158     } else {
159         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleVolumeChanged is null");
160     }
161 }
162 
HandleStatusChanged(NWeb::PlaybackStatus status)163 void NativeMediaPlayerHandlerImpl::HandleStatusChanged(NWeb::PlaybackStatus status)
164 {
165     if (handler_) {
166         handler_->HandleStatusChanged(status);
167     } else {
168         WEBVIEWLOGE("NativeMediaPlayerHandlerImpl::HandleStatusChanged is null");
169     }
170 }
171 
172 // RemoteMediaPlayer
ExitFullScreen(int64_t id)173 void RemoteMediaPlayer::ExitFullScreen(int64_t id)
174 {
175     auto exitFullscreen = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeExitFullscreen;
176     if (!exitFullscreen) {
177         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::ExitFullScreen is empty.");
178         return;
179     }
180     exitFullscreen(id);
181 }
182 
EnterFullScreen(int64_t id)183 void RemoteMediaPlayer::EnterFullScreen(int64_t id)
184 {
185     auto enterFullscreen = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeEnterFullscreen;
186     if (!enterFullscreen) {
187         WEBVIEWLOGE("RemoteMediaPlayer::EnterFullScreen is empty.");
188         return;
189     }
190     enterFullscreen(id);
191 }
192 
Release(int64_t id)193 void RemoteMediaPlayer::Release(int64_t id)
194 {
195     auto release = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeRelease;
196     if (!release) {
197         WEBVIEWLOGE("RemoteMediaPlayer::Release is empty.");
198         return;
199     }
200     release(id);
201 }
202 
SetPlaybackRate(int64_t id,double playbackRate)203 void RemoteMediaPlayer::SetPlaybackRate(int64_t id, double playbackRate)
204 {
205     auto setPlaybackRate = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeSetPlaybackRate;
206     if (!setPlaybackRate) {
207         WEBVIEWLOGE("RemoteMediaPlayer::SetPlaybackRate is empty.");
208         return;
209     }
210     setPlaybackRate(id, playbackRate);
211 }
212 
SetMuted(int64_t id,bool isMuted)213 void RemoteMediaPlayer::SetMuted(int64_t id, bool isMuted)
214 {
215     auto setMuted = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeSetMuted;
216     if (!setMuted) {
217         WEBVIEWLOGE("RemoteMediaPlayer::setMuted is empty.");
218         return;
219     }
220     setMuted(id, isMuted);
221 }
222 
SetVolume(int64_t id,double volume)223 void RemoteMediaPlayer::SetVolume(int64_t id, double volume)
224 {
225     auto setVolume = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeSetVolume;
226     if (!setVolume) {
227         WEBVIEWLOGE("RemoteMediaPlayer::SetVolume is empty.");
228         return;
229     }
230     setVolume(id, volume);
231 }
232 
Seek(int64_t id,double time)233 void RemoteMediaPlayer::Seek(int64_t id, double time)
234 {
235     auto seek = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeSeek;
236     if (!seek) {
237         WEBVIEWLOGE("RemoteMediaPlayer::Seek is empty.");
238         return;
239     }
240     seek(id, time);
241 }
242 
Pause(int64_t id)243 void RemoteMediaPlayer::Pause(int64_t id)
244 {
245     auto pause = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgePause;
246     if (!pause) {
247         WEBVIEWLOGE("RemoteMediaPlayer::Pause is empty.");
248         return;
249     }
250     pause(id);
251 }
252 
Play(int64_t id)253 void RemoteMediaPlayer::Play(int64_t id)
254 {
255     auto play = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgePlay;
256     if (!play) {
257         WEBVIEWLOGE("RemoteMediaPlayer::Play is empty.");
258         return;
259     }
260     play(id);
261 }
262 
UpdateRect(int64_t id,double x,double y,double width,double height)263 void RemoteMediaPlayer::UpdateRect(int64_t id, double x, double y, double width, double height)
264 {
265     auto updateRect = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeUpdateRect;
266     if (!updateRect) {
267         WEBVIEWLOGE("RemoteMediaPlayer::UpdateRect is empty.");
268         return;
269     }
270     CRectEvent rectEvent = { x, y, width, height };
271     updateRect(id, rectEvent);
272 }
273 
ResumeMediaPlayer(int64_t id)274 void RemoteMediaPlayer::ResumeMediaPlayer(int64_t id)
275 {
276     auto resumePlayer = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeResumePlayer;
277     if (!resumePlayer) {
278         WEBVIEWLOGE("RemoteMediaPlayer::ResumeMediaPlayer is empty.");
279         return;
280     }
281     resumePlayer(id);
282 }
283 
SuspendMediaPlayer(int64_t id,NWeb::SuspendType type)284 void RemoteMediaPlayer::SuspendMediaPlayer(int64_t id, NWeb::SuspendType type)
285 {
286     auto suspendPlayer = WebRuntimeDelegate::GetInstance().GetCJFuncs().atCOHOSNativeMediaPlayerBridgeSuspendPlayer;
287     if (!suspendPlayer) {
288         WEBVIEWLOGE("RemoteMediaPlayer::SuspendMediaPlayer is empty.");
289         return;
290     }
291     suspendPlayer(id, static_cast<int32_t>(type));
292 }
293 
294 //NWebNativeMediaPlayerBridgeImpl
NWebNativeMediaPlayerBridgeImpl(int64_t nwebId,sptr<RemoteMediaPlayer> remoteMediaPlayer)295 NWebNativeMediaPlayerBridgeImpl::NWebNativeMediaPlayerBridgeImpl(int64_t nwebId,
296     sptr<RemoteMediaPlayer> remoteMediaPlayer) : nwebId_(nwebId), remoteMediaPlayer_(remoteMediaPlayer) {}
297 
ExitFullScreen()298 void NWebNativeMediaPlayerBridgeImpl::ExitFullScreen()
299 {
300     if (remoteMediaPlayer_ == nullptr) {
301         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::ExitFullScreen is nullptr.");
302         return;
303     }
304     remoteMediaPlayer_->ExitFullScreen(nwebId_);
305 }
306 
EnterFullScreen()307 void NWebNativeMediaPlayerBridgeImpl::EnterFullScreen()
308 {
309     if (remoteMediaPlayer_ == nullptr) {
310         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::EnterFullScreen is nullptr.");
311         return;
312     }
313     remoteMediaPlayer_->EnterFullScreen(nwebId_);
314 }
315 
Release()316 void NWebNativeMediaPlayerBridgeImpl::Release()
317 {
318     if (remoteMediaPlayer_ == nullptr) {
319         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::Release is nullptr.");
320         return;
321     }
322     remoteMediaPlayer_->Release(nwebId_);
323 }
324 
SetPlaybackRate(double playbackRate)325 void NWebNativeMediaPlayerBridgeImpl::SetPlaybackRate(double playbackRate)
326 {
327     if (remoteMediaPlayer_ == nullptr) {
328         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::SetPlaybackRate is nullptr.");
329         return;
330     }
331     remoteMediaPlayer_->SetPlaybackRate(nwebId_, playbackRate);
332 }
333 
SetMuted(bool isMuted)334 void NWebNativeMediaPlayerBridgeImpl::SetMuted(bool isMuted)
335 {
336     if (remoteMediaPlayer_ == nullptr) {
337         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::SetMuted is nullptr.");
338         return;
339     }
340     remoteMediaPlayer_->SetMuted(nwebId_, isMuted);
341 }
342 
SetVolume(double volume)343 void NWebNativeMediaPlayerBridgeImpl::SetVolume(double volume)
344 {
345     if (remoteMediaPlayer_ == nullptr) {
346         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::SetVolume is nullptr.");
347         return;
348     }
349     remoteMediaPlayer_->SetVolume(nwebId_, volume);
350 }
351 
Seek(double time)352 void NWebNativeMediaPlayerBridgeImpl::Seek(double time)
353 {
354     if (remoteMediaPlayer_ == nullptr) {
355         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::Seek is nullptr.");
356         return;
357     }
358     remoteMediaPlayer_->Seek(nwebId_, time);
359 }
360 
Pause()361 void NWebNativeMediaPlayerBridgeImpl::Pause()
362 {
363     if (remoteMediaPlayer_ == nullptr) {
364         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::Pause is nullptr.");
365         return;
366     }
367     remoteMediaPlayer_->Pause(nwebId_);
368 }
369 
Play()370 void NWebNativeMediaPlayerBridgeImpl::Play()
371 {
372     if (remoteMediaPlayer_ == nullptr) {
373         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::Play is nullptr.");
374         return;
375     }
376     remoteMediaPlayer_->Play(nwebId_);
377 }
378 
UpdateRect(double x,double y,double width,double height)379 void NWebNativeMediaPlayerBridgeImpl::UpdateRect(double x, double y, double width, double height)
380 {
381     if (remoteMediaPlayer_ == nullptr) {
382         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::UpdateRect is nullptr.");
383         return;
384     }
385     remoteMediaPlayer_->UpdateRect(nwebId_, x, y, width, height);
386 }
387 
ResumeMediaPlayer()388 void NWebNativeMediaPlayerBridgeImpl::ResumeMediaPlayer()
389 {
390     if (remoteMediaPlayer_ == nullptr) {
391         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::ResumeMediaPlayer is nullptr.");
392         return;
393     }
394     remoteMediaPlayer_->ResumeMediaPlayer(nwebId_);
395 }
396 
SuspendMediaPlayer(NWeb::SuspendType type)397 void NWebNativeMediaPlayerBridgeImpl::SuspendMediaPlayer(NWeb::SuspendType type)
398 {
399     if (remoteMediaPlayer_ == nullptr) {
400         WEBVIEWLOGE("NWebNativeMediaPlayerBridgeImpl::SuspendMediaPlayer is nullptr.");
401         return;
402     }
403     remoteMediaPlayer_->SuspendMediaPlayer(nwebId_, type);
404 }
405 
NWebCreateNativeMediaPlayerCallbackImpl(int32_t nwebId,std::function<int64_t (int64_t,CMediaInfo)> callback)406 NWebCreateNativeMediaPlayerCallbackImpl::NWebCreateNativeMediaPlayerCallbackImpl(
407     int32_t nwebId, std::function<int64_t(int64_t, CMediaInfo)> callback)
408     : nwebId_(nwebId), callback_(callback)
409 {}
410 
ConstructMediaSrcList(std::vector<std::shared_ptr<NWeb::NWebMediaSourceInfo>> mediaSrcList_)411 CArrMediaSourceInfo NWebCreateNativeMediaPlayerCallbackImpl::ConstructMediaSrcList(
412     std::vector<std::shared_ptr<NWeb::NWebMediaSourceInfo>> mediaSrcList_)
413 {
414     CMediaSourceInfo* result = static_cast<CMediaSourceInfo*>(malloc(sizeof(CMediaSourceInfo) * mediaSrcList_.size()));
415     if (result == nullptr) {
416         return {};
417     }
418     for (size_t i = 0; i < mediaSrcList_.size(); i++) {
419         const char* format = MallocCString(mediaSrcList_[i]->GetFormat());
420         const char* source = MallocCString(mediaSrcList_[i]->GetSource());
421         int32_t type = static_cast<int32_t>(mediaSrcList_[i]->GetType());
422         CMediaSourceInfo cMediaSourceInfo = {format, source, type};
423         result[i] = cMediaSourceInfo;
424     }
425     CArrMediaSourceInfo mediaSrcList = {result, mediaSrcList_.size()};
426     return mediaSrcList;
427 }
428 
ConstructSurfaceInfo(std::shared_ptr<NWeb::NWebNativeMediaPlayerSurfaceInfo> surfaceInfo_)429 CNativeMediaPlayerSurfaceInfo NWebCreateNativeMediaPlayerCallbackImpl::ConstructSurfaceInfo(
430     std::shared_ptr<NWeb::NWebNativeMediaPlayerSurfaceInfo> surfaceInfo_)
431 {
432     CNativeMediaPlayerSurfaceInfo surfaceInfo;
433     CRectEvent event;
434     surfaceInfo.id = MallocCString(surfaceInfo_->GetId());
435     event.x = surfaceInfo_->GetX();
436     event.y = surfaceInfo_->GetY();
437     event.width = surfaceInfo_->GetWidth();
438     event.height = surfaceInfo_->GetHeight();
439     surfaceInfo.rect = event;
440     return surfaceInfo;
441 }
442 
ConstructControlList(std::vector<std::string> controlList_)443 CArrString NWebCreateNativeMediaPlayerCallbackImpl::ConstructControlList(
444     std::vector<std::string> controlList_)
445 {
446     char** result = static_cast<char**>(malloc(sizeof(char *) * controlList_.size()));
447     if (result == nullptr) {
448         return {};
449     }
450     for (size_t i = 0; i < controlList_.size(); i++) {
451         result[i] = MallocCString(controlList_[i]);
452     }
453     CArrString controlList = {result, controlList_.size()};
454     return controlList;
455 }
456 
ConstructMap(std::map<std::string,std::string> headers_)457 ArrMapItem NWebCreateNativeMediaPlayerCallbackImpl::ConstructMap(
458     std::map<std::string, std::string> headers_)
459 {
460     MapItem* result3 = static_cast<MapItem*>(malloc(sizeof(MapItem) * headers_.size()));
461     if (result3 == nullptr) {
462         return {};
463     }
464     size_t i = 0;
465     for (const auto& pair : headers_) {
466         MapItem mapItem = {MallocCString(pair.first), MallocCString(pair.second)};
467         result3[i] = mapItem;
468         i++;
469     }
470     ArrMapItem headers = {result3, headers_.size()};
471     return headers;
472 }
473 
OnCreate(std::shared_ptr<NWeb::NWebNativeMediaPlayerHandler> handler,std::shared_ptr<NWeb::NWebMediaInfo> mediaInfo)474 std::shared_ptr<NWeb::NWebNativeMediaPlayerBridge> NWebCreateNativeMediaPlayerCallbackImpl::OnCreate(
475     std::shared_ptr<NWeb::NWebNativeMediaPlayerHandler> handler, std::shared_ptr<NWeb::NWebMediaInfo> mediaInfo)
476 {
477     WEBVIEWLOGD("begin to create native media player,nweb id is %{public}d", nwebId_);
478     if (!callback_) {
479         WEBVIEWLOGE("callback is null,nweb id is %{public}d", nwebId_);
480         return nullptr;
481     }
482     if (!handler || !mediaInfo) {
483         WEBVIEWLOGE("param is null,nweb id is %{public}d", nwebId_);
484         return nullptr;
485     }
486     auto handlerImpl = FFIData::Create<NativeMediaPlayerHandlerImpl>(nwebId_, handler);
487     if (!handlerImpl) {
488         WEBVIEWLOGE("Create handlerImpl failed, nweb id is %{public}d", nwebId_);
489         return nullptr;
490     }
491     int64_t handlerId = handlerImpl->GetID();
492     std::string embedID_ = mediaInfo->GetEmbedId();
493     const char* embedID = MallocCString(embedID_);
494     int32_t mediaType = static_cast<int32_t>(mediaInfo->GetMediaType());
495     CArrMediaSourceInfo mediaSrcList = ConstructMediaSrcList(mediaInfo->GetSourceInfos());
496     CNativeMediaPlayerSurfaceInfo surfaceInfo = ConstructSurfaceInfo(mediaInfo->GetSurfaceInfo());
497     bool controlsShown = mediaInfo->GetIsControlsShown();
498     CArrString controlList = ConstructControlList(mediaInfo->GetControls());
499     bool muted = mediaInfo->GetIsMuted();
500     std::string posterUrl_ = mediaInfo->GetPosterUrl();
501     const char* posterUrl = MallocCString(posterUrl_);
502     int32_t preload = static_cast<int32_t>(mediaInfo->GetPreload());
503     ArrMapItem headers = ConstructMap(mediaInfo->GetHeaders());
504     ArrMapItem attributes = ConstructMap(mediaInfo->GetAttributes());
505     CMediaInfo cMediaInfo = {embedID, mediaType, mediaSrcList, surfaceInfo,
506         controlsShown, controlList, muted, posterUrl, preload, headers, attributes};
507     int64_t nativeMediaPlayerBridgeId = callback_(handlerId, cMediaInfo);
508     auto remoteMediaPlayer = OHOS::FFI::RemoteData::Create<OHOS::Webview::RemoteMediaPlayer>(nativeMediaPlayerBridgeId);
509     return std::make_shared<NWebNativeMediaPlayerBridgeImpl>(nativeMediaPlayerBridgeId, remoteMediaPlayer);
510 }
511 } // namespace OHOS::Webview