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