diff --git a/.gitignore b/.gitignore
index 9491a2f..6d91b10 100644
--- a/.gitignore
+++ b/.gitignore
@@ -360,4 +360,7 @@ MigrationBackup/
.ionide/
# Fody - auto-generated XML schema
-FodyWeavers.xsd
\ No newline at end of file
+FodyWeavers.xsd
+
+*.DS_Store
+**/.idea
\ No newline at end of file
diff --git a/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/OH_AVPlayer.cs b/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/OH_AVPlayer.cs
new file mode 100644
index 0000000..e318a9b
--- /dev/null
+++ b/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/OH_AVPlayer.cs
@@ -0,0 +1,292 @@
+using System.Runtime.InteropServices;
+using System.Runtime.InteropServices.Marshalling;
+
+namespace OpenHarmony.NDK.Bindings.Media_Kit.AVPlayer
+{
+ ///
+ /// AVPlayer
+ ///
+ ///
+ public unsafe partial struct OH_AVPlayer
+ {
+
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVPlayer* OH_AVPlayer_Create();
+
+ ///
+ /// 设置播放器的播放源。对应的源可以是http url。
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetURLSource(OH_AVPlayer* player, [MarshalAs(UnmanagedType.LPStr)] string url);
+ ///
+ /// 设置播放器的播放媒体文件描述符来源
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetFDSource(OH_AVPlayer* player, int fd, long offset, long size);
+ ///
+ /// 准备播放环境,异步缓存媒体数据
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Prepare(OH_AVPlayer* player);
+ ///
+ /// 开始播放
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Play(OH_AVPlayer* player);
+ ///
+ /// 暂停播放
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Pause(OH_AVPlayer* player);
+ ///
+ /// 停止播放
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Stop(OH_AVPlayer* player);
+ ///
+ /// 将播放器恢复到初始状态
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Reset(OH_AVPlayer* player);
+ ///
+ /// 异步释放播放器资源
+ ///
+ ///
+ ///
+
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Release(OH_AVPlayer* player);
+ ///
+ /// 同步释放播放器资源
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_ReleaseSync(OH_AVPlayer* player);
+ ///
+ /// 设置播放器的音量
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetVolume(OH_AVPlayer* player, float leftVolume, float rightVolume);
+ ///
+ /// 改变播放位置
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_Seek(OH_AVPlayer* player, int mSeconds, AVPlayerSeekMode mode);
+ ///
+ /// 获取播放位置,精确到毫秒。
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetCurrentTime(OH_AVPlayer* player, int* currentTime);
+ ///
+ /// 获取视频高度
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetVideoHeight(OH_AVPlayer* player, int* videoHeight);
+ ///
+ /// 设置播放器播放速率
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetPlaybackSpeed(OH_AVPlayer* player, AVPlaybackSpeed speed);
+ ///
+ /// 设置player音频流类型
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetPlaybackSpeed(OH_AVPlayer* player, AVPlaybackSpeed* speed);
+ ///
+ /// 设置player音频流类型
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetAudioRendererInfo(OH_AVPlayer* player, OH_AudioStream_Usage streamUsage);
+ ///
+ /// 设置player音频流的音效模式
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetAudioEffectMode(OH_AVPlayer* player, OH_AudioStream_AudioEffectMode effectMode);
+ ///
+ /// 设置hls播放器使用的码率
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SelectBitRate(OH_AVPlayer* player, int bitRate);
+ ///
+ /// 设置播放画面窗口
+ ///
+ ///
+ ///
+ ///
+
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetVideoSurface(OH_AVPlayer* player, OHNativeWindow* window);
+ ///
+ /// 获取媒体文件的总时长,精确到毫秒
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetDuration(OH_AVPlayer* player, int* duration);
+ ///
+ /// 获取当前播放状态
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetState(OH_AVPlayer* player, AVPlayerState* state);
+ ///
+ /// 判断播放器是否在播放
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_Bool OH_AVPlayer_IsPlaying(OH_AVPlayer* player);
+ ///
+ /// 判断是用循环播放
+ ///
+ ///
+ ///
+
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_Bool OH_AVPlayer_IsLooping(OH_AVPlayer* player);
+ ///
+ /// 设置循环播放
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetLooping(OH_AVPlayer* player, OH_Bool loop);
+
+ ///
+ /// 设置播放器回调方法
+ /// 由于通过此方法设置的信息监听回调函数OH_AVPlayerOnInfo和错误监听回调函数OH_AVPlayerOnError可以传递信息有限,也不便于应用区分多个播放器实例。
+ /// 从 API 12 开始,应使用OH_AVPlayer_SetOnInfoCallback()、OH_AVPlayer_SetOnErrorCallback()接口分别设置信息监听回调函数OH_AVPlayerOnInfoCallback和错误监听回调函数OH_AVPlayerOnErrorCallback。
+ ///
+ ///
+ ///
+ ///
+ [Obsolete]
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetPlayerCallback(OH_AVPlayer* player, AVPlayerCallback callback);
+ ///
+ /// 选择音频或字幕轨道
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SelectTrack(OH_AVPlayer* player, int index);
+ ///
+ /// 取消选择当前音频或字幕轨道
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_DeselectTrack(OH_AVPlayer* player, int index);
+ ///
+ /// 获取当前有效的轨道索引
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetCurrentTrack(OH_AVPlayer* player, int trackType, int* index);
+ ///
+ /// 设置播放器媒体密钥系统信息回调的方法
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetMediaKeySystemInfoCallback(OH_AVPlayer* player, delegate* unmanaged[Cdecl] callback);
+ ///
+ /// 获取媒体密钥系统信息以创建媒体密钥会话
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_GetMediaKeySystemInfo(OH_AVPlayer* player, DRM_MediaKeySystemInfo* mediaKeySystemInfo);
+ ///
+ /// 设置解密信息
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetDecryptionConfig(OH_AVPlayer* player, MediaKeySession* mediaKeySession, OH_Bool secureVideoPath);
+
+ ///
+ /// 设置播放器消息回调监听函数
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetOnInfoCallback(OH_AVPlayer* player,
+ delegate* unmanaged[Cdecl] callback,
+ IntPtr userData);
+
+ ///
+ /// 设置播放器错误回调监听函数
+ ///
+ ///
+ ///
+ ///
+ ///
+ [LibraryImport("libavplayer.so")]
+ public static partial OH_AVErrCode OH_AVPlayer_SetOnErrorCallback(OH_AVPlayer* player,
+ delegate* unmanaged[Cdecl] callback, IntPtr userData);
+ }
+}
diff --git a/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/player_framework_enums.cs b/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/player_framework_enums.cs
new file mode 100644
index 0000000..4277f28
--- /dev/null
+++ b/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/player_framework_enums.cs
@@ -0,0 +1,352 @@
+namespace OpenHarmony.NDK.Bindings.Media_Kit.AVPlayer
+{
+ public enum OH_AVErrCode
+ {
+ ///
+ /// 操作成功
+ ///
+ AV_ERR_OK,
+ ///
+ /// 无内存
+ ///
+ AV_ERR_NO_MEMORY,
+ ///
+ /// 操作不允许
+ ///
+ AV_ERR_OPERATE_NOT_PERMIT,
+ ///
+ /// 无效值
+ ///
+ AV_ERR_INVALID_VAL,
+ ///
+ /// IO错误
+ ///
+ AV_ERR_IO,
+ ///
+ /// 超时错误
+ ///
+ AV_ERR_TIMEOUT,
+ ///
+ /// 未知错误
+ ///
+ AV_ERR_UNKNOWN,
+ ///
+ /// 服务死亡
+ ///
+ AV_ERR_SERVICE_DIED,
+ ///
+ /// 当前状态不支持此操作
+ ///
+ AV_ERR_INVALID_STATE,
+ ///
+ /// 未支持的功能
+ ///
+ AV_ERR_UNSUPPORT,
+ ///
+ /// 扩展错误码初始值
+ ///
+ AV_ERR_EXTEND_START,
+ ///
+ /// DRM起始错误码。
+ /// 起始版本: 12
+ ///
+ AV_ERR_DRM_BASE,
+ ///
+ /// DRM解密失败。
+ /// 起始版本: 12
+ ///
+ AV_ERR_DRM_DECRYPT_FAILED,
+ ///
+ /// 视频起始错误码。
+ /// 起始版本: 12
+ ///
+ AV_ERR_VIDEO_BASE,
+ ///
+ /// 视频不支持色彩空间转换
+ /// 起始版本: 12
+ ///
+ AV_ERR_VIDEO_UNSUPPORTED_COLOR_SPACE_CONVERSION
+
+ }
+ ///
+ /// 跳转模式
+ ///
+ public enum AVPlayerSeekMode
+ {
+ ///
+ /// 同步到时间点之后的关键帧
+ ///
+ AV_SEEK_NEXT_SYNC,
+ ///
+ /// 同步到时间点之前的关键帧
+ ///
+ AV_SEEK_PREVIOUS_SYNC,
+ ///
+ /// 同步到距离指定时间点最近的帧
+ /// 起始版本: 12
+ ///
+ AV_SEEK_CLOSEST
+ }
+ public enum AVPlaybackSpeed
+ {
+ ///
+ /// 0.75倍速播放
+ ///
+ AV_SPEED_FORWARD_0_75_X,
+ ///
+ /// 正常播放
+ ///
+ AV_SPEED_FORWARD_1_00_X,
+ ///
+ /// 1.25倍速播放
+ ///
+ AV_SPEED_FORWARD_1_25_X,
+ ///
+ /// 1.75倍速播放
+ ///
+ AV_SPEED_FORWARD_1_75_X,
+ ///
+ /// 2倍速播放
+ ///
+ AV_SPEED_FORWARD_2_00_X,
+ ///
+ /// 0.5倍速播放
+ ///起始版本: 12
+ ///
+ AV_SPEED_FORWARD_0_50_X,
+ ///
+ /// 1.5倍速播放
+ ///起始版本: 12
+ ///
+ AV_SPEED_FORWARD_1_50_X,
+ ///
+ /// 3.0倍速播放
+ ///起始版本: 13
+ ///
+ AV_SPEED_FORWARD_3_00_X,
+ ///
+ /// 0.25倍速播放
+ ///起始版本: 13
+ ///
+ AV_SPEED_FORWARD_0_25_X,
+ ///
+ /// 0.125倍速播放
+ ///起始版本: 13
+ ///
+ AV_SPEED_FORWARD_0_125_X
+ }
+ public enum AVPlayerState
+ {
+ ///
+ /// 空闲
+ ///
+ AV_IDLE,
+ ///
+ /// 初始化
+ ///
+ AV_INITIALIZED,
+ ///
+ /// 准备
+ ///
+ AV_PREPARED,
+ ///
+ /// 播放
+ ///
+ AV_PLAYING,
+ ///
+ /// 暂停
+ ///
+ AV_PAUSED,
+ ///
+ /// 停止
+ ///
+ AV_STOPPED,
+ ///
+ /// 结束
+ ///
+ AV_COMPLETED,
+ ///
+ /// 释放
+ ///
+ AV_RELEASED,
+ ///
+ /// 错误
+ ///
+ AV_ERROR
+ }
+ ///
+ /// 信息类型
+ /// 收到播放器消息时调用
+ ///
+ public enum AVPlayerOnInfoType
+ {
+ ///
+ /// 跳转到对应播放位置时返回消息,extra表示seek到的位置
+ ///
+ AV_INFO_TYPE_SEEKDONE,
+ ///
+ /// 播放倍速设置完成时返回消息,extra表示播放倍速信息,具体请参考AVPlaybackSpeed
+ ///
+ AV_INFO_TYPE_SPEEDDONE,
+ ///
+ ///比特率设置完成时返回消息。
+ ///key为OH_PLAYER_BITRATE:取值类型uint32_t。系统通过int32_t传递value,应用需先通过int32_t获取,再强制为uint32_t。
+ ///
+ AV_INFO_TYPE_BITRATEDONE,
+ ///
+ /// 播放完成时返回消息。
+ ///
+ AV_INFO_TYPE_EOS,
+ ///
+ /// 状态改变时返回消息。
+ ///- key为OH_PLAYER_STATE:取值类型int32_t。系统通过int32_t传递value,应用需先通过int32_t获取,再强制转为AVPlayerState。
+ ///- key为OH_PLAYER_STATE_CHANGE_REASON:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。1:用户操作触发;2:系统变更触发。
+ ///
+ AV_INFO_TYPE_STATE_CHANGE,
+ ///
+ /// 返回当前播放位置。
+ ///key为OH_PLAYER_CURRENT_POSITION:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。
+ ///
+ AV_INFO_TYPE_POSITION_UPDATE,
+ ///
+ /// 视频开始渲染时返回消息。
+ ///key为OH_PLAYER_MESSAGE_TYPE:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。1表示视频开始渲染。
+ ///
+ AV_INFO_TYPE_MESSAGE,
+ ///
+ /// 音量改变时返回消息。
+ ///key为OH_PLAYER_VOLUME:取值类型float。系统通过float传递value,应用需通过float获取。取值范围[0.0, 1.0]。
+ ///
+ AV_INFO_TYPE_VOLUME_CHANGE,
+ ///
+ /// 首次获取视频大小或视频大小更新时返回消息。
+ ///key为OH_PLAYER_VIDEO_WIDTH 或 OH_PLAYER_VIDEO_HEIGHT:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。
+ ///
+ AV_INFO_TYPE_RESOLUTION_CHANGE,
+ ///
+ /// 返回多队列缓冲时间。
+ ///- key为OH_PLAYER_BUFFERING_TYPE:取值类型AVPlayerBufferingType。系统通过int32_t传递value,应用需先通过int32_t获取,再强制转为AVPlayerBufferingType。
+ ///- key为OH_PLAYER_BUFFERING_VALUE:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。当缓冲更新消息类型是AVPLAYER_BUFFERING_PERCENT、AVPLAYER_BUFFERING_CACHED_DURATION时有效,分别表示缓冲进度完成百分比、缓冲数据可播放时长。
+ ///
+ AV_INFO_TYPE_BUFFERING_UPDATE,
+ ///
+ /// 上报HLS视频比特率列表消息。
+ ///key为OH_PLAYER_BITRATE_ARRAY:取值类型uint8_t字节数组。应用需要先使用uint8_t类型指针变量保存比特率列表,使用size_t类型变量保存字节数组长度。然后分配若干个uint32_t类型的存储空间,接收将uint8_t字节数组转换为uint32_t类型比特率整数值。
+ ///
+ AV_INFO_TYPE_BITRATE_COLLECT,
+ ///
+ ///音频焦点改变时返回消息。
+ ///取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。
+ ///key为:
+ ///- OH_PLAYER_AUDIO_INTERRUPT_TYPE:取值1表示中断事件开始;2表示结束。
+ ///- OH_PLAYER_AUDIO_INTERRUPT_FORCE:取值0表示强制打断,系统改变音频播放状态;1表示共享打断,应用改变音频播放状态。
+ ///- OH_PLAYER_AUDIO_INTERRUPT_HINT:取值0表示NONE,无提示;1表示RESUME,提示音频恢复;2表示PAUSE,提示音频暂停暂时失去焦点;3表示STOP,提示音频停止;4表示DUCK,音频降低音量;5表示UNDUCK,音频恢复音量。
+ ///
+ AV_INFO_TYPE_INTERRUPT_EVENT,
+ ///
+ /// 返回播放时长。
+ ///key为OH_PLAYER_DURATION:取值类型int64_t。系统通过int64_t传递value,应用需通过int64_t获取。
+ ///
+ AV_INFO_TYPE_DURATION_UPDATE,
+ ///
+ /// 播放为直播流时返回消息。
+ ///key为OH_PLAYER_IS_LIVE_STREAM:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。0表示非直播流,1表示直播流。
+ ///
+ AV_INFO_TYPE_IS_LIVE_STREAM,
+ ///
+ /// 轨道改变时返回消息,此场景暂未定义
+ ///
+ AV_INFO_TYPE_TRACKCHANGE,
+ ///
+ /// 轨道更新时返回消息,此场景暂未定义
+ ///
+ AV_INFO_TYPE_TRACK_INFO_UPDATE,
+ ///
+ /// 字幕信息更新时返回消息,此场景暂未定义
+ ///
+ AV_INFO_TYPE_SUBTITLE_UPDATE,
+ ///
+ ///音频输出设备改变时返回消息。
+ ///key为OH_PLAYER_AUDIO_DEVICE_CHANGE_REASON:取值类型int32_t。系统通过int32_t传递value,应用需通过int32_t获取。
+ ///
+ AV_INFO_TYPE_AUDIO_OUTPUT_DEVICE_CHANGE
+ }
+ ///
+ /// 音频流设置的类型
+ ///
+ public enum OH_AudioStream_Usage
+ {
+ ///
+ /// 未知类型
+ ///
+ AUDIOSTREAM_USAGE_UNKNOWN,
+ ///
+ /// 音乐
+ ///
+ AUDIOSTREAM_USAGE_MUSIC,
+ ///
+ /// VoIP语音通话
+ ///
+ AUDIOSTREAM_USAGE_VOICE_COMMUNICATION,
+ ///
+ /// 语音播报
+ ///
+ AUDIOSTREAM_USAGE_VOICE_ASSISTANT,
+ ///
+ /// 闹钟
+ ///
+ AUDIOSTREAM_USAGE_ALARM,
+ ///
+ /// 语音消息
+ ///
+ AUDIOSTREAM_USAGE_VOICE_MESSAGE,
+ ///
+ /// 铃声
+ ///
+ AUDIOSTREAM_USAGE_RINGTONE,
+ ///
+ /// 通知
+ ///
+ AUDIOSTREAM_USAGE_NOTIFICATION,
+ ///
+ /// 无障碍
+ ///
+ AUDIOSTREAM_USAGE_ACCESSIBILITY,
+ ///
+ /// 电影或视频
+ ///
+ AUDIOSTREAM_USAGE_MOVIE,
+ ///
+ /// 游戏
+ ///
+ AUDIOSTREAM_USAGE_GAME,
+ ///
+ /// 有声读物(包括听书、相声、评书)、听新闻、播客等
+ ///
+ AUDIOSTREAM_USAGE_AUDIOBOOK,
+ ///
+ /// 导航
+ ///
+ AUDIOSTREAM_USAGE_NAVIGATION,
+ ///
+ /// VoIP视频通话
+ /// 起始版本: 12
+ ///
+ AUDIOSTREAM_USAGE_VIDEO_COMMUNICATION
+ }
+ ///
+ /// 音效模式
+ /// 起始版本: 12
+ ///
+ public enum OH_AudioStream_AudioEffectMode
+ {
+ ///
+ /// 无音效模式
+ ///
+ EFFECT_NONE,
+ ///
+ /// 默认音效模式
+ ///
+ EFFECT_DEFAULT
+ }
+}
diff --git a/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/player_framework_structs.cs b/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/player_framework_structs.cs
new file mode 100644
index 0000000..c161357
--- /dev/null
+++ b/OpenHarmony.NDK.Bindings/Media_Kit/AVPlayer/player_framework_structs.cs
@@ -0,0 +1,68 @@
+using System.Runtime.InteropServices;
+using System.Runtime.InteropServices.Marshalling;
+
+namespace OpenHarmony.NDK.Bindings.Media_Kit.AVPlayer
+{
+ [StructLayout(LayoutKind.Sequential)]
+ public struct MediaKeySession
+ {
+
+ }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct OH_AVFormat
+ {
+
+ }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct DRM_MediaKeySystemInfo
+ {
+ public int PsshCount { get; set; }
+ public DRM_PsshInfo PsshInfo { get; set; }
+ }
+ ///
+ /// uuid的PSSH信息
+ /// https://developer.huawei.com/consumer/cn/doc/harmonyos-references/_d_r_m___pssh_info
+ ///
+ [StructLayout(LayoutKind.Sequential)]
+ public struct DRM_PsshInfo
+ {
+ public uint UuId { get; set; }
+ public int DataLen { get; set; }
+ public uint Data { get; set; }
+ }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct OHNativeWindow
+ {
+
+ }
+
+ [CustomMarshaller(typeof(AVPlayerCallback), MarshalMode.Default, typeof(AVPlayerCallbackMarshaller))]
+ public static unsafe class AVPlayerCallbackMarshaller
+ {
+ public static AVPlayerCallback ConvertToManaged(IntPtr unmanaged)
+ {
+ return Marshal.PtrToStructure(unmanaged);
+ }
+
+ public static IntPtr ConvertToUnmanaged(AVPlayerCallback managed)
+ {
+ IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf());
+ Marshal.StructureToPtr(managed, ptr, false);
+ return ptr;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public unsafe struct AVPlayerCallback
+ {
+ ///
+ /// Info 委托方法
+ ///
+ public delegate* unmanaged[Cdecl] OH_AVPlayerOnInfo;
+
+ ///
+ /// Error 委托方法<
+ ///
+ public delegate* unmanaged[Cdecl] OH_AVPlayerOnError;
+ }
+}
diff --git a/OpenHarmony.NDK.Bindings/OH_Bool.cs b/OpenHarmony.NDK.Bindings/OH_Bool.cs
new file mode 100644
index 0000000..47d7f0c
--- /dev/null
+++ b/OpenHarmony.NDK.Bindings/OH_Bool.cs
@@ -0,0 +1,8 @@
+namespace OpenHarmony.NDK.Bindings
+{
+ public enum OH_Bool
+ {
+ False,
+ True
+ }
+}
diff --git a/OpenHarmony.NDK.Bindings/libc/LibcFile.cs b/OpenHarmony.NDK.Bindings/libc/LibcFile.cs
new file mode 100644
index 0000000..8e844e4
--- /dev/null
+++ b/OpenHarmony.NDK.Bindings/libc/LibcFile.cs
@@ -0,0 +1,22 @@
+using System.Runtime.InteropServices;
+
+namespace OpenHarmony.NDK.Bindings.libc;
+
+public static partial class LibcFile
+{
+ ///
+ /// 打开文件
+ ///
+ ///
+ ///
+ /// fd
+ [LibraryImport("libc",EntryPoint = "open",SetLastError = true)]
+ public static partial int Open([MarshalAs(UnmanagedType.LPStr)] string path, OpenFlags flags);
+
+ ///
+ /// 释放文件
+ ///
+ ///
+ [LibraryImport("libc",EntryPoint = "close",SetLastError = true)]
+ public static partial void Close(int fd);
+}
\ No newline at end of file
diff --git a/OpenHarmony.NDK.Bindings/libc/LibcFlags.cs b/OpenHarmony.NDK.Bindings/libc/LibcFlags.cs
new file mode 100644
index 0000000..d4d4d70
--- /dev/null
+++ b/OpenHarmony.NDK.Bindings/libc/LibcFlags.cs
@@ -0,0 +1,11 @@
+namespace OpenHarmony.NDK.Bindings.libc;
+
+[Flags]
+public enum OpenFlags
+{
+ Read = 0x00,
+ Write = 0x01,
+ ReadWrite = 0x02,
+ Creat = 0x40,
+ Trunc = 0x200
+}
\ No newline at end of file