1 /* 2 * Copyright (C) 2023 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 /** 17 * @addtogroup AVPlayer 18 * @{ 19 * 20 * @brief Provides APIs of Playback capability for Media Source. 21 * 22 * @Syscap SystemCapability.Multimedia.Media.AVPlayer 23 * @since 11 24 * @version 1.0 25 */ 26 27 /** 28 * @file avplayer.h 29 * 30 * @brief Defines the avplayer APIs. Uses the Native APIs provided by Media AVPlayer 31 * to play the media source. 32 * 33 * @kit MediaKit 34 * @library libavplayer.so 35 * @since 11 36 * @version 1.0 37 */ 38 39 #ifndef MULTIMEDIA_PLAYER_FRAMEWORK_NATIVE_AVPLAYER_H 40 #define MULTIMEDIA_PLAYER_FRAMEWORK_NATIVE_AVPLAYER_H 41 42 #include <stdint.h> 43 #include <stdio.h> 44 #include "native_averrors.h" 45 #include "avplayer_base.h" 46 #include "native_audiostream_base.h" 47 48 49 #ifdef __cplusplus 50 extern "C" { 51 #endif 52 53 typedef struct MediaKeySession MediaKeySession; 54 typedef struct DRM_MediaKeySystemInfo DRM_MediaKeySystemInfo; 55 typedef void (*Player_MediaKeySystemInfoCallback)(OH_AVPlayer *play, DRM_MediaKeySystemInfo* mediaKeySystemInfo); 56 57 /** 58 * @brief Create a player 59 * @syscap SystemCapability.Multimedia.Media.AVPlayer 60 * @return Returns a pointer to an OH_AVPlayer instance 61 * @since 11 62 * @version 1.0 63 */ 64 OH_AVPlayer *OH_AVPlayer_Create(void); 65 66 /** 67 * @brief Sets the playback source for the player. The corresponding source can be http url 68 * @syscap SystemCapability.Multimedia.Media.AVPlayer 69 * @param player Pointer to an OH_AVPlayer instance 70 * @param url Indicates the playback source. 71 * @return Returns {@link AV_ERR_OK} if the url is set successfully; returns an error code defined 72 * in {@link native_averrors.h} otherwise. 73 * @since 11 74 * @version 1.0 75 */ 76 OH_AVErrCode OH_AVPlayer_SetURLSource(OH_AVPlayer *player, const char *url); 77 78 /** 79 * @brief Sets the playback media file descriptor source for the player. 80 * @syscap SystemCapability.Multimedia.Media.AVPlayer 81 * @param player Pointer to an OH_AVPlayer instance 82 * @param fd Indicates the file descriptor of media source. 83 * @param offset Indicates the offset of media source in file descriptor. 84 * @param size Indicates the size of media source. 85 * @return Returns {@link AV_ERR_OK} if the fd source is set successfully; returns an error code defined 86 * in {@link native_averrors.h} otherwise. 87 * @since 11 88 * @version 1.0 89 */ 90 OH_AVErrCode OH_AVPlayer_SetFDSource(OH_AVPlayer *player, int32_t fd, int64_t offset, int64_t size); 91 92 /** 93 * @brief Prepares the playback environment and buffers media data asynchronous. 94 * 95 * This function must be called after {@link SetSource}. 96 * 97 * @syscap SystemCapability.Multimedia.Media.AVPlayer 98 * @param player Pointer to an OH_AVPlayer instance 99 * @return Returns {@link AV_ERR_OK} if {@link Prepare} is successfully added to the task queue; 100 * returns an error code defined in {@link native_averrors.h} otherwise. 101 * @since 11 102 * @version 1.0 103 */ 104 OH_AVErrCode OH_AVPlayer_Prepare(OH_AVPlayer *player); 105 106 /** 107 * @brief Start playback. 108 * 109 * This function must be called after {@link Prepare}. If the player state is <b>Prepared</b>, 110 * this function is called to start playback. 111 * 112 * @syscap SystemCapability.Multimedia.Media.AVPlayer 113 * @param player Pointer to an OH_AVPlayer instance 114 * @return Returns {@link AV_ERR_OK} if the playback is started; otherwise returns an error code defined 115 * in {@link native_averrors.h} otherwise. 116 * @since 11 117 * @version 1.0 118 */ 119 OH_AVErrCode OH_AVPlayer_Play(OH_AVPlayer *player); 120 121 /** 122 * @brief Pauses playback. 123 * @syscap SystemCapability.Multimedia.Media.AVPlayer 124 * @param player Pointer to an OH_AVPlayer instance 125 * @return Returns {@link AV_ERR_OK} if {@link Pause} is successfully added to the task queue; 126 * returns an error code defined in {@link native_averrors.h} otherwise. 127 * @since 11 128 * @version 1.0 129 */ 130 OH_AVErrCode OH_AVPlayer_Pause(OH_AVPlayer *player); 131 132 /** 133 * @brief Stop playback. 134 * @syscap SystemCapability.Multimedia.Media.AVPlayer 135 * @param player Pointer to an OH_AVPlayer instance 136 * @return Returns {@link AV_ERR_OK} if {@link Stop} is successfully added to the task queue; 137 * returns an error code defined in {@link native_averrors.h} otherwise. 138 * @since 11 139 * @version 1.0 140 */ 141 OH_AVErrCode OH_AVPlayer_Stop(OH_AVPlayer *player); 142 143 /** 144 * @brief Restores the player to the initial state. 145 * 146 * After the function is called, add a playback source by calling {@link SetSource}, 147 * call {@link Play} to start playback again after {@link Prepare} is called. 148 * 149 * @syscap SystemCapability.Multimedia.Media.AVPlayer 150 * @param player Pointer to an OH_AVPlayer instance 151 * @return Returns {@link AV_ERR_OK} if {@link Reset} is successfully added to the task queue; 152 * returns an error code defined in {@link native_averrors.h} otherwise. 153 * @since 11 154 * @version 1.0 155 */ 156 OH_AVErrCode OH_AVPlayer_Reset(OH_AVPlayer *player); 157 158 /** 159 * @brief Releases player resources async 160 * 161 * Asynchronous release guarantees the performance 162 * but cannot ensure whether the surfacebuffer is released. 163 * The caller needs to ensure the life cycle security of the surface 164 * 165 * @syscap SystemCapability.Multimedia.Media.AVPlayer 166 * @param player Pointer to an OH_AVPlayer instance 167 * @return Returns {@link AV_ERR_OK} if {@link Release} is successfully added to the task queue; 168 * returns an error code defined in {@link native_averrors.h} otherwise. 169 * @since 11 170 * @version 1.0 171 */ 172 OH_AVErrCode OH_AVPlayer_Release(OH_AVPlayer *player); 173 174 /** 175 * @brief Releases player resources sync 176 * 177 * Synchronous release ensures effective release of surfacebuffer 178 * but this interface will take a long time (when the engine is not idle state) 179 * requiring the caller to design an asynchronous mechanism by itself 180 * 181 * @syscap SystemCapability.Multimedia.Media.AVPlayer 182 * @param player Pointer to an OH_AVPlayer instance 183 * @return Returns {@link AV_ERR_OK} if the playback is released; returns an error code defined 184 * in {@link native_averrors.h} otherwise. 185 * @since 11 186 * @version 1.0 187 */ 188 OH_AVErrCode OH_AVPlayer_ReleaseSync(OH_AVPlayer *player); 189 190 /** 191 * @brief Sets the volume of the player. 192 * 193 * This function can be used during playback or pause. The value <b>0</b> indicates no sound, 194 * and <b>1</b> indicates the original volume. If no audio device is started or no audio 195 * stream exists, the value <b>-1</b> is returned. 196 * 197 * @syscap SystemCapability.Multimedia.Media.AVPlayer 198 * @param player Pointer to an OH_AVPlayer instance 199 * @param leftVolume Indicates the target volume of the left audio channel to set, 200 * ranging from 0 to 1. each step is 0.01. 201 * @param rightVolume Indicates the target volume of the right audio channel to set, 202 * ranging from 0 to 1. each step is 0.01. 203 * @return Returns {@link AV_ERR_OK} if the volume is set; returns an error code defined 204 * in {@link native_averrors.h} otherwise. 205 * @since 11 206 * @version 1.0 207 */ 208 OH_AVErrCode OH_AVPlayer_SetVolume(OH_AVPlayer *player, float leftVolume, float rightVolume); 209 210 /** 211 * @brief Changes the playback position. 212 * 213 * This function can be used during play or pause. 214 * 215 * @syscap SystemCapability.Multimedia.Media.AVPlayer 216 * @param player Pointer to an OH_AVPlayer instance 217 * @param mSeconds Indicates the target playback position, accurate to milliseconds. 218 * @param mode Indicates the player seek mode. For details, see {@link AVPlayerSeekMode}. 219 * @return Returns {@link AV_ERR_OK} if the seek is done; returns an error code defined 220 * in {@link native_averrors.h} otherwise. 221 * @since 11 222 * @version 1.0 223 */ 224 OH_AVErrCode OH_AVPlayer_Seek(OH_AVPlayer *player, int32_t mSeconds, AVPlayerSeekMode mode); 225 226 /** 227 * @brief Obtains the playback position, accurate to millisecond. 228 * @syscap SystemCapability.Multimedia.Media.AVPlayer 229 * @param player Pointer to an OH_AVPlayer instance 230 * @param currentTime Indicates the playback position. 231 * @return Returns {@link AV_ERR_OK} if the current position is get; returns an error code defined 232 * in {@link native_averrors.h} otherwise. 233 * @since 11 234 * @version 1.0 235 */ 236 OH_AVErrCode OH_AVPlayer_GetCurrentTime(OH_AVPlayer *player, int32_t *currentTime); 237 238 /** 239 * @brief get the video width. 240 * @syscap SystemCapability.Multimedia.Media.AVPlayer 241 * @param player Pointer to an OH_AVPlayer instance 242 * @param videoWidth The video width 243 * @return Returns {@link AV_ERR_OK} if the current position is get; returns an error code defined 244 * in {@link native_averrors.h} otherwise. 245 * @since 11 246 * @version 1.0 247 */ 248 OH_AVErrCode OH_AVPlayer_GetVideoWidth(OH_AVPlayer *player, int32_t *videoWidth); 249 250 /** 251 * @brief get the video height. 252 * @syscap SystemCapability.Multimedia.Media.AVPlayer 253 * @param player Pointer to an OH_AVPlayer instance 254 * @param videoHeight The video height 255 * @return Returns {@link AV_ERR_OK} if the current position is get; returns an error code defined 256 * in {@link native_averrors.h} otherwise. 257 * @since 11 258 * @version 1.0 259 */ 260 OH_AVErrCode OH_AVPlayer_GetVideoHeight(OH_AVPlayer *player, int32_t *videoHeight); 261 262 /** 263 * @brief set the player playback rate 264 * @syscap SystemCapability.Multimedia.Media.AVPlayer 265 * @param player Pointer to an OH_AVPlayer instance 266 * @param speed the rate mode {@link AVPlaybackSpeed} which can set. 267 * @return Returns {@link AV_ERR_OK} if the playback rate is set successful; returns an error code defined 268 * in {@link native_averrors.h} otherwise. 269 * @since 11 270 * @version 1.0 271 */ 272 OH_AVErrCode OH_AVPlayer_SetPlaybackSpeed(OH_AVPlayer *player, AVPlaybackSpeed speed); 273 274 /** 275 * @brief get the current player playback rate 276 * @syscap SystemCapability.Multimedia.Media.AVPlayer 277 * @param player Pointer to an OH_AVPlayer instance 278 * @param speed the rate mode {@link AVPlaybackSpeed} which can get. 279 * @return Returns {@link AV_ERR_OK} if the current player playback rate is get; returns an error code defined 280 * in {@link native_averrors.h} otherwise. 281 * @since 11 282 * @version 1.0 283 */ 284 OH_AVErrCode OH_AVPlayer_GetPlaybackSpeed(OH_AVPlayer *player, AVPlaybackSpeed *speed); 285 286 /** 287 * @brief Set the renderer information of the player's audio renderer 288 * @param player Pointer to an OH_AVPlayer instance 289 * @param streamUsage The value {@link OH_AudioStream_Usage} used for the stream usage of the player audio render. 290 * @return Function result code. 291 * {@link AV_ERR_OK} if the execution is successful. 292 * {@link AV_ERR_INVALID_VAL} if input player is nullptr or streamUsage value is invalid. 293 * @since 12 294 * @version 1.0 295 */ 296 OH_AVErrCode OH_AVPlayer_SetAudioRendererInfo(OH_AVPlayer *player, OH_AudioStream_Usage streamUsage); 297 298 /** 299 * @brief Set the interruption mode of the player's audio stream 300 * @param player Pointer to an OH_AVPlayer instance 301 * @param interruptMode The value {@link OH_AudioInterrupt_Mode} used for the interruption mode of 302 * the player audio stream. 303 * @return Function result code. 304 * {@link AV_ERR_OK} if the execution is successful. 305 * {@link AV_ERR_INVALID_VAL} if input player is nullptr or interruptMode value is invalid. 306 * @since 12 307 * @version 1.0 308 */ 309 OH_AVErrCode OH_AVPlayer_SetAudioInterruptMode(OH_AVPlayer *player, OH_AudioInterrupt_Mode interruptMode); 310 311 /** 312 * @brief Set the effect mode of the player's audio stream 313 * @param player Pointer to an OH_AVPlayer instance 314 * @param effectMode The value {@link OH_AudioStream_AudioEffectMode} used for the effect mode of 315 * the player audio stream. 316 * @return Function result code. 317 * {@link AV_ERR_OK} if the execution is successful. 318 * {@link AV_ERR_INVALID_VAL} if input player is nullptr or effectMode value is invalid. 319 * @since 12 320 * @version 1.0 321 */ 322 OH_AVErrCode OH_AVPlayer_SetAudioEffectMode(OH_AVPlayer *player, OH_AudioStream_AudioEffectMode effectMode); 323 324 /** 325 * @brief set the bit rate use for hls player 326 * 327 * the playback bitrate expressed in bits per second, expressed in bits per second, 328 * which is only valid for HLS protocol network flow. By default, 329 * the player will select the appropriate bit rate and speed according to the network connection. 330 * report the effective bit rate linked list by "INFO_TYPE_BITRATE_COLLECT" 331 * set and select the specified bit rate, and select the bit rate that is less than and closest 332 * to the specified bit rate for playback. When ready, read it to query the currently selected bit rate. 333 * 334 * @syscap SystemCapability.Multimedia.Media.AVPlayer 335 * @param player Pointer to an OH_AVPlayer instance 336 * @param bitRate the bit rate, The unit is bps. 337 * @return Returns {@link AV_ERR_OK} if the bit rate is set successfully; returns an error code defined 338 * in {@link native_averrors.h} otherwise. 339 * @since 11 340 * @version 1.0 341 */ 342 OH_AVErrCode OH_AVPlayer_SelectBitRate(OH_AVPlayer *player, uint32_t bitRate); 343 344 /** 345 * @brief Method to set the surface. 346 * @syscap SystemCapability.Multimedia.Media.AVPlayer 347 * @param player Pointer to an OH_AVPlayer instance 348 * @param window A pointer to a OHNativeWindow instance, see {@link OHNativeWindow} 349 * @return Returns {@link AV_ERR_OK} if the surface is set; returns an error code defined 350 * in {@link native_averrors.h} otherwise. 351 * @since 11 352 * @version 1.0 353 */ 354 OH_AVErrCode OH_AVPlayer_SetVideoSurface(OH_AVPlayer *player, OHNativeWindow *window); 355 356 /** 357 * @brief Obtains the total duration of media files, accurate to milliseconds. 358 * @syscap SystemCapability.Multimedia.Media.AVPlayer 359 * @param player Pointer to an OH_AVPlayer instance 360 * @param duration Indicates the total duration of media files. 361 * @return Returns {@link AV_ERR_OK} if the current duration is get; returns an error code defined 362 * in {@link native_averrors.h} otherwise. 363 * @since 11 364 * @version 1.0 365 */ 366 OH_AVErrCode OH_AVPlayer_GetDuration(OH_AVPlayer *player, int32_t *duration); 367 368 /** 369 * @brief get current playback state. 370 * @syscap SystemCapability.Multimedia.Media.AVPlayer 371 * @param player Pointer to an OH_AVPlayer instance 372 * @param state the current playback state 373 * @return Returns {@link AV_ERR_OK} if the current duration is get; returns an error code defined 374 * in {@link native_averrors.h} otherwise. 375 * @since 11 376 * @version 1.0 377 */ 378 OH_AVErrCode OH_AVPlayer_GetState(OH_AVPlayer *player, AVPlayerState *state); 379 380 /** 381 * @brief Checks whether the player is playing. 382 * @syscap SystemCapability.Multimedia.Media.AVPlayer 383 * @param player Pointer to an OH_AVPlayer instance 384 * @return Returns true if the playback is playing; false otherwise. 385 * @since 11 386 * @version 1.0 387 */ 388 bool OH_AVPlayer_IsPlaying(OH_AVPlayer *player); 389 390 /** 391 * @brief Returns the value whether single looping is enabled or not . 392 * @syscap SystemCapability.Multimedia.Media.AVPlayer 393 * @param player Pointer to an OH_AVPlayer instance 394 * @return Returns true if the playback is single looping; false otherwise. 395 * @since 11 396 * @version 1.0 397 */ 398 bool OH_AVPlayer_IsLooping(OH_AVPlayer *player); 399 400 /** 401 * @brief Enables single looping of the media playback. 402 * @syscap SystemCapability.Multimedia.Media.AVPlayer 403 * @param player Pointer to an OH_AVPlayer instance 404 * @param loop The switch to set loop 405 * @return Returns {@link AV_ERR_OK} if the single looping is set; returns an error code defined 406 * in {@link native_averrors.h} otherwise. 407 * @since 11 408 * @version 1.0 409 */ 410 OH_AVErrCode OH_AVPlayer_SetLooping(OH_AVPlayer *player, bool loop); 411 412 /** 413 * @brief Method to set player callback. 414 * @syscap SystemCapability.Multimedia.Media.AVPlayer 415 * @param player Pointer to an OH_AVPlayer instance 416 * @param callback object pointer. 417 * @return Returns {@link AV_ERR_OK} if the playercallback is set; returns an error code defined 418 * in {@link native_averrors.h} otherwise. 419 * @since 11 420 * @deprecated since 12 421 * @useinstead {@link OH_AVPlayer_SetPlayerOnInfoCallback} {@link OH_AVPlayer_SetPlayerOnErrorCallback} 422 * @version 1.0 423 */ 424 OH_AVErrCode OH_AVPlayer_SetPlayerCallback(OH_AVPlayer *player, AVPlayerCallback callback); 425 426 /** 427 * @brief Select audio or subtitle track. 428 * 429 * By default, the first audio stream with data is played, and the subtitle track is not played. 430 * After the settings take effect, the original track will become invalid. Please set subtitles 431 * in prepared/playing/paused/completed state and set audio tracks in prepared state. 432 * 433 * @syscap SystemCapability.Multimedia.Media.AVPlayer 434 * @param player Pointer to an OH_AVPlayer instance 435 * @param index Track index 436 * @return Returns {@link AV_ERR_OK} if selected successfully; returns an error code defined 437 * in {@link native_averrors.h} otherwise. 438 * @since 11 439 * @version 1.0 440 */ 441 OH_AVErrCode OH_AVPlayer_SelectTrack(OH_AVPlayer *player, int32_t index); 442 443 /** 444 * @brief Deselect the current audio or subtitle track. 445 * 446 * After audio is deselected, the default track will be played, and after subtitles are deselected, 447 * they will not be played. Please set subtitles in prepared/playing/paused/completed state and set 448 * audio tracks in prepared state. 449 * 450 * @syscap SystemCapability.Multimedia.Media.AVPlayer 451 * @param player Pointer to an OH_AVPlayer instance 452 * @param index Track index 453 * @return Returns {@link AV_ERR_OK} if selected successfully; returns an error code defined 454 * in {@link native_averrors.h} otherwise. 455 * @since 11 456 * @version 1.0 457 */ 458 OH_AVErrCode OH_AVPlayer_DeselectTrack(OH_AVPlayer *player, int32_t index); 459 460 /** 461 * @brief Obtain the currently effective track index. 462 * 463 * Please get it in the prepared/playing/paused/completed state. 464 * 465 * @syscap SystemCapability.Multimedia.Media.AVPlayer 466 * @param player Pointer to an OH_AVPlayer instance 467 * @param trackType Media type. 468 * @param index Track index 469 * @return Returns {@link AV_ERR_OK} if the track index is get; returns an error code defined 470 * in {@link native_averrors.h} otherwise. 471 * @since 11 472 * @version 1.0 473 */ 474 OH_AVErrCode OH_AVPlayer_GetCurrentTrack(OH_AVPlayer *player, int32_t trackType, int32_t *index); 475 476 /** 477 * @brief Method to set player media key system info callback. 478 * @syscap SystemCapability.Multimedia.Media.AVPlayer 479 * @param player Pointer to an OH_AVPlayer instance 480 * @param callback object pointer. 481 * @return Returns {@link AV_ERR_OK} if the drm info callback is set; returns an error code defined 482 * in {@link native_averrors.h} otherwise. 483 * @since 12 484 * @version 1.0 485 */ 486 OH_AVErrCode OH_AVPlayer_SetMediaKeySystemInfoCallback(OH_AVPlayer *player, 487 Player_MediaKeySystemInfoCallback callback); 488 489 /** 490 * @brief Obtains media key system info to create media key session. 491 * @syscap SystemCapability.Multimedia.Media.AVPlayer 492 * @param player Pointer to an OH_AVPlayer instance 493 * @param mediaKeySystemInfo Media key system info. 494 * @return Returns {@link AV_ERR_OK} if the current position is get; returns an error code defined 495 * in {@link native_averrors.h} otherwise. 496 * @since 12 497 * @version 1.0 498 */ 499 OH_AVErrCode OH_AVPlayer_GetMediaKeySystemInfo(OH_AVPlayer *player, DRM_MediaKeySystemInfo *mediaKeySystemInfo); 500 501 /** 502 * @brief Set decryption info. 503 * 504 * @syscap SystemCapability.Multimedia.Media.AVPlayer 505 * @param player Pointer to an OH_AVPlayer instance 506 * @param mediaKeySession A media key session instance with decryption function. 507 * @param secureVideoPath Require secure decoder or not. 508 * @return Returns AV_ERR_OK if the execution is successful, 509 * otherwise returns a specific error code, refer to {@link OH_AVErrCode} 510 * @since 12 511 * @version 1.0 512 */ 513 OH_AVErrCode OH_AVPlayer_SetDecryptionConfig(OH_AVPlayer *player, MediaKeySession *mediaKeySession, 514 bool secureVideoPath); 515 516 /** 517 * @brief Method to set player information notify callback. 518 * @syscap SystemCapability.Multimedia.Media.AVPlayer 519 * @param player Pointer to an OH_AVPlayer instance. 520 * @param callback Pointer to callback function, nullptr indicates unregister callback. 521 * @param userData Pointer to user specific data. 522 * @return Function result code. 523 * {@link AV_ERR_OK} if the execution is successful. 524 * {@link AV_ERR_INVALID_VAL} if input player is null or player SetOnInfoCallback failed. 525 * @since 12 526 */ 527 OH_AVErrCode OH_AVPlayer_SetOnInfoCallback(OH_AVPlayer *player, OH_AVPlayerOnInfoCallback callback, void *userData); 528 529 /** 530 * @brief Method to set player error callback. 531 * @syscap SystemCapability.Multimedia.Media.AVPlayer 532 * @param player Pointer to an OH_AVPlayer instance. 533 * @param callback Pointer to callback function, nullptr indicates unregister callback. 534 * @param userData Pointer to user specific data. 535 * @return Function result code. 536 * {@link AV_ERR_OK} if the execution is successful. 537 * {@link AV_ERR_INVALID_VAL} if input player is null or player SetOnErrorCallback failed. 538 * @since 12 539 */ 540 OH_AVErrCode OH_AVPlayer_SetOnErrorCallback(OH_AVPlayer *player, OH_AVPlayerOnErrorCallback callback, void *userData); 541 542 #ifdef __cplusplus 543 } 544 #endif 545 546 #endif // MULTIMEDIA_PLAYER_FRAMEWORK_NATIVE_AVPLAYER_H 547