|
|
@@ -1,560 +0,0 @@
|
|
|
-#ifndef IPLAYERCONTROLLER_H
|
|
|
-#define IPLAYERCONTROLLER_H
|
|
|
-
|
|
|
-#include <string>
|
|
|
-#include <memory>
|
|
|
-#include <functional>
|
|
|
-#include <chrono>
|
|
|
-#include <vector>
|
|
|
-#include <map>
|
|
|
-
|
|
|
-namespace AVPlayer2 {
|
|
|
-namespace Core {
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放器状态枚举
|
|
|
- */
|
|
|
-enum class PlayerState {
|
|
|
- Stopped, // 停止状态
|
|
|
- Loading, // 加载中
|
|
|
- Loaded, // 已加载
|
|
|
- Playing, // 播放中
|
|
|
- Paused, // 暂停
|
|
|
- Seeking, // 跳转中
|
|
|
- Buffering, // 缓冲中
|
|
|
- Error // 错误状态
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放模式枚举
|
|
|
- */
|
|
|
-enum class PlayMode {
|
|
|
- Normal, // 正常播放
|
|
|
- Loop, // 循环播放
|
|
|
- Shuffle, // 随机播放
|
|
|
- RepeatOne // 单曲循环
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 缩放模式枚举
|
|
|
- */
|
|
|
-enum class ScaleMode {
|
|
|
- Fit, // 适应窗口
|
|
|
- Fill, // 填充窗口
|
|
|
- Stretch, // 拉伸
|
|
|
- Original, // 原始大小
|
|
|
- Custom // 自定义
|
|
|
-};
|
|
|
-
|
|
|
-} // namespace Core
|
|
|
-
|
|
|
-namespace Types {
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放器配置
|
|
|
- */
|
|
|
-struct PlayerConfig {
|
|
|
- bool enableHardwareDecoding; // 启用硬件解码
|
|
|
- bool enableAudioOutput; // 启用音频输出
|
|
|
- bool enableVideoOutput; // 启用视频输出
|
|
|
- bool enableSubtitles; // 启用字幕
|
|
|
- int maxVideoFrameBuffer; // 最大视频帧缓冲
|
|
|
- int maxAudioFrameBuffer; // 最大音频帧缓冲
|
|
|
- double seekAccuracy; // 跳转精度(秒)
|
|
|
- bool autoPlay; // 自动播放
|
|
|
- double defaultVolume; // 默认音量(0.0-1.0)
|
|
|
- Core::PlayMode defaultPlayMode; // 默认播放模式
|
|
|
- Core::ScaleMode defaultScaleMode; // 默认缩放模式
|
|
|
- std::string userAgent; // 用户代理
|
|
|
- int networkTimeout; // 网络超时(毫秒)
|
|
|
-
|
|
|
- PlayerConfig() {
|
|
|
- enableHardwareDecoding = true;
|
|
|
- enableAudioOutput = true;
|
|
|
- enableVideoOutput = true;
|
|
|
- enableSubtitles = true;
|
|
|
- maxVideoFrameBuffer = 10;
|
|
|
- maxAudioFrameBuffer = 20;
|
|
|
- seekAccuracy = 1.0;
|
|
|
- autoPlay = false;
|
|
|
- defaultVolume = 1.0;
|
|
|
- defaultPlayMode = Core::PlayMode::Normal;
|
|
|
- defaultScaleMode = Core::ScaleMode::Fit;
|
|
|
- userAgent = "AVPlayer2/1.0";
|
|
|
- networkTimeout = 30000;
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放器统计信息
|
|
|
- */
|
|
|
-struct PlayerStats {
|
|
|
- std::chrono::microseconds totalDuration; // 总时长
|
|
|
- std::chrono::microseconds currentPosition; // 当前位置
|
|
|
- double playbackSpeed; // 播放速度
|
|
|
- int videoFrameRate; // 视频帧率
|
|
|
- int audioSampleRate; // 音频采样率
|
|
|
- int videoBitrate; // 视频比特率
|
|
|
- int audioBitrate; // 音频比特率
|
|
|
- int droppedFrames; // 丢弃帧数
|
|
|
- int renderedFrames; // 渲染帧数
|
|
|
- double bufferHealth; // 缓冲健康度(0.0-1.0)
|
|
|
- std::string videoCodec; // 视频编解码器
|
|
|
- std::string audioCodec; // 音频编解码器
|
|
|
-
|
|
|
- PlayerStats() {
|
|
|
- totalDuration = std::chrono::microseconds(0);
|
|
|
- currentPosition = std::chrono::microseconds(0);
|
|
|
- playbackSpeed = 1.0;
|
|
|
- videoFrameRate = 0;
|
|
|
- audioSampleRate = 0;
|
|
|
- videoBitrate = 0;
|
|
|
- audioBitrate = 0;
|
|
|
- droppedFrames = 0;
|
|
|
- renderedFrames = 0;
|
|
|
- bufferHealth = 0.0;
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放列表项
|
|
|
- */
|
|
|
-struct PlaylistItem {
|
|
|
- std::string id; // 项目ID
|
|
|
- std::string url; // 媒体URL
|
|
|
- std::string title; // 标题
|
|
|
- std::string artist; // 艺术家
|
|
|
- std::string album; // 专辑
|
|
|
- std::chrono::microseconds duration; // 时长
|
|
|
- std::map<std::string, std::string> metadata; // 元数据
|
|
|
-
|
|
|
- PlaylistItem() {
|
|
|
- duration = std::chrono::microseconds(0);
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 字幕信息
|
|
|
- */
|
|
|
-struct SubtitleTrack {
|
|
|
- int index; // 轨道索引
|
|
|
- std::string language; // 语言
|
|
|
- std::string title; // 标题
|
|
|
- std::string codec; // 编解码器
|
|
|
- bool isDefault; // 是否默认
|
|
|
- bool isForced; // 是否强制
|
|
|
-
|
|
|
- SubtitleTrack() {
|
|
|
- index = -1;
|
|
|
- isDefault = false;
|
|
|
- isForced = false;
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 音频轨道信息
|
|
|
- */
|
|
|
-struct AudioTrack {
|
|
|
- int index; // 轨道索引
|
|
|
- std::string language; // 语言
|
|
|
- std::string title; // 标题
|
|
|
- std::string codec; // 编解码器
|
|
|
- int channels; // 声道数
|
|
|
- int sampleRate; // 采样率
|
|
|
- int bitrate; // 比特率
|
|
|
- bool isDefault; // 是否默认
|
|
|
-
|
|
|
- AudioTrack() {
|
|
|
- index = -1;
|
|
|
- channels = 0;
|
|
|
- sampleRate = 0;
|
|
|
- bitrate = 0;
|
|
|
- isDefault = false;
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-} // namespace Types
|
|
|
-
|
|
|
-namespace Core {
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放器控制器抽象接口
|
|
|
- * 提供完整的媒体播放控制功能
|
|
|
- */
|
|
|
-class IPlayerController {
|
|
|
-public:
|
|
|
- virtual ~IPlayerController() = default;
|
|
|
-
|
|
|
- /**
|
|
|
- * 初始化播放器
|
|
|
- * @param config 播放器配置
|
|
|
- * @return 是否初始化成功
|
|
|
- */
|
|
|
- virtual bool initialize(const Types::PlayerConfig& config) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 释放播放器资源
|
|
|
- */
|
|
|
- virtual void release() = 0;
|
|
|
-
|
|
|
- // ========== 媒体加载 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 加载媒体文件
|
|
|
- * @param url 媒体文件URL或路径
|
|
|
- * @return 是否开始加载
|
|
|
- */
|
|
|
- virtual bool loadMedia(const std::string& url) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 卸载当前媒体
|
|
|
- */
|
|
|
- virtual void unloadMedia() = 0;
|
|
|
-
|
|
|
- // ========== 播放控制 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 开始播放
|
|
|
- * @return 是否开始播放
|
|
|
- */
|
|
|
- virtual bool play() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 暂停播放
|
|
|
- */
|
|
|
- virtual void pause() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 停止播放
|
|
|
- */
|
|
|
- virtual void stop() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 跳转到指定位置
|
|
|
- * @param position 目标位置(微秒)
|
|
|
- * @return 是否开始跳转
|
|
|
- */
|
|
|
- virtual bool seekTo(std::chrono::microseconds position) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 相对跳转
|
|
|
- * @param offset 偏移量(微秒,正数向前,负数向后)
|
|
|
- * @return 是否开始跳转
|
|
|
- */
|
|
|
- virtual bool seekBy(std::chrono::microseconds offset) = 0;
|
|
|
-
|
|
|
- // ========== 播放参数 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置播放速度
|
|
|
- * @param speed 播放速度(1.0为正常速度)
|
|
|
- */
|
|
|
- virtual void setPlaybackSpeed(double speed) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取播放速度
|
|
|
- * @return 当前播放速度
|
|
|
- */
|
|
|
- virtual double getPlaybackSpeed() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置音量
|
|
|
- * @param volume 音量(0.0-1.0)
|
|
|
- */
|
|
|
- virtual void setVolume(double volume) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取音量
|
|
|
- * @return 当前音量
|
|
|
- */
|
|
|
- virtual double getVolume() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置静音
|
|
|
- * @param muted 是否静音
|
|
|
- */
|
|
|
- virtual void setMuted(bool muted) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取静音状态
|
|
|
- * @return 是否静音
|
|
|
- */
|
|
|
- virtual bool isMuted() const = 0;
|
|
|
-
|
|
|
- // ========== 状态查询 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取播放器状态
|
|
|
- * @return 当前状态
|
|
|
- */
|
|
|
- virtual PlayerState getState() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前播放位置
|
|
|
- * @return 当前位置(微秒)
|
|
|
- */
|
|
|
- virtual std::chrono::microseconds getCurrentPosition() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取媒体总时长
|
|
|
- * @return 总时长(微秒)
|
|
|
- */
|
|
|
- virtual std::chrono::microseconds getDuration() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取缓冲进度
|
|
|
- * @return 缓冲进度(0.0-1.0)
|
|
|
- */
|
|
|
- virtual double getBufferProgress() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否可以播放
|
|
|
- * @return 是否可以播放
|
|
|
- */
|
|
|
- virtual bool canPlay() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否可以暂停
|
|
|
- * @return 是否可以暂停
|
|
|
- */
|
|
|
- virtual bool canPause() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否可以跳转
|
|
|
- * @return 是否可以跳转
|
|
|
- */
|
|
|
- virtual bool canSeek() const = 0;
|
|
|
-
|
|
|
- // ========== 轨道管理 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取音频轨道列表
|
|
|
- * @return 音频轨道列表
|
|
|
- */
|
|
|
- virtual std::vector<Types::AudioTrack> getAudioTracks() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取字幕轨道列表
|
|
|
- * @return 字幕轨道列表
|
|
|
- */
|
|
|
- virtual std::vector<Types::SubtitleTrack> getSubtitleTracks() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 选择音频轨道
|
|
|
- * @param index 轨道索引
|
|
|
- * @return 是否选择成功
|
|
|
- */
|
|
|
- virtual bool selectAudioTrack(int index) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 选择字幕轨道
|
|
|
- * @param index 轨道索引(-1表示关闭字幕)
|
|
|
- * @return 是否选择成功
|
|
|
- */
|
|
|
- virtual bool selectSubtitleTrack(int index) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前音频轨道索引
|
|
|
- * @return 当前音频轨道索引
|
|
|
- */
|
|
|
- virtual int getCurrentAudioTrack() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前字幕轨道索引
|
|
|
- * @return 当前字幕轨道索引
|
|
|
- */
|
|
|
- virtual int getCurrentSubtitleTrack() const = 0;
|
|
|
-
|
|
|
- // ========== 播放列表 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置播放模式
|
|
|
- * @param mode 播放模式
|
|
|
- */
|
|
|
- virtual void setPlayMode(PlayMode mode) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取播放模式
|
|
|
- * @return 当前播放模式
|
|
|
- */
|
|
|
- virtual PlayMode getPlayMode() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加播放列表项
|
|
|
- * @param item 播放列表项
|
|
|
- * @return 是否添加成功
|
|
|
- */
|
|
|
- virtual bool addPlaylistItem(const Types::PlaylistItem& item) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 移除播放列表项
|
|
|
- * @param index 项目索引
|
|
|
- * @return 是否移除成功
|
|
|
- */
|
|
|
- virtual bool removePlaylistItem(int index) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 清空播放列表
|
|
|
- */
|
|
|
- virtual void clearPlaylist() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取播放列表
|
|
|
- * @return 播放列表
|
|
|
- */
|
|
|
- virtual std::vector<Types::PlaylistItem> getPlaylist() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 播放指定项目
|
|
|
- * @param index 项目索引
|
|
|
- * @return 是否开始播放
|
|
|
- */
|
|
|
- virtual bool playItem(int index) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 播放下一项
|
|
|
- * @return 是否开始播放
|
|
|
- */
|
|
|
- virtual bool playNext() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 播放上一项
|
|
|
- * @return 是否开始播放
|
|
|
- */
|
|
|
- virtual bool playPrevious() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前播放项索引
|
|
|
- * @return 当前播放项索引
|
|
|
- */
|
|
|
- virtual int getCurrentPlaylistIndex() const = 0;
|
|
|
-
|
|
|
- // ========== 视频控制 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置视频缩放模式
|
|
|
- * @param mode 缩放模式
|
|
|
- */
|
|
|
- virtual void setScaleMode(ScaleMode mode) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取视频缩放模式
|
|
|
- * @return 当前缩放模式
|
|
|
- */
|
|
|
- virtual ScaleMode getScaleMode() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置视频旋转角度
|
|
|
- * @param angle 旋转角度(度)
|
|
|
- */
|
|
|
- virtual void setRotation(int angle) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取视频旋转角度
|
|
|
- * @return 当前旋转角度
|
|
|
- */
|
|
|
- virtual int getRotation() const = 0;
|
|
|
-
|
|
|
- // ========== 统计信息 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取播放器统计信息
|
|
|
- * @return 统计信息
|
|
|
- */
|
|
|
- virtual Types::PlayerStats getStats() const = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 重置统计信息
|
|
|
- */
|
|
|
- virtual void resetStats() = 0;
|
|
|
-
|
|
|
- // ========== 回调设置 ==========
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置状态变化回调
|
|
|
- * @param callback 状态变化回调函数
|
|
|
- */
|
|
|
- virtual void setStateChangedCallback(
|
|
|
- std::function<void(PlayerState, PlayerState)> callback) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置位置变化回调
|
|
|
- * @param callback 位置变化回调函数
|
|
|
- */
|
|
|
- virtual void setPositionChangedCallback(
|
|
|
- std::function<void(std::chrono::microseconds)> callback) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置时长变化回调
|
|
|
- * @param callback 时长变化回调函数
|
|
|
- */
|
|
|
- virtual void setDurationChangedCallback(
|
|
|
- std::function<void(std::chrono::microseconds)> callback) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置缓冲进度回调
|
|
|
- * @param callback 缓冲进度回调函数
|
|
|
- */
|
|
|
- virtual void setBufferProgressCallback(
|
|
|
- std::function<void(double)> callback) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置媒体加载完成回调
|
|
|
- * @param callback 媒体加载完成回调函数
|
|
|
- */
|
|
|
- virtual void setMediaLoadedCallback(
|
|
|
- std::function<void(const std::string&)> callback) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置播放完成回调
|
|
|
- * @param callback 播放完成回调函数
|
|
|
- */
|
|
|
- virtual void setPlaybackFinishedCallback(
|
|
|
- std::function<void()> callback) = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置错误回调
|
|
|
- * @param callback 错误回调函数
|
|
|
- */
|
|
|
- virtual void setErrorCallback(
|
|
|
- std::function<void(const std::string&, const std::string&)> callback) = 0;
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- * 播放器控制器工厂接口
|
|
|
- */
|
|
|
-class IPlayerControllerFactory {
|
|
|
-public:
|
|
|
- virtual ~IPlayerControllerFactory() = default;
|
|
|
-
|
|
|
- /**
|
|
|
- * 创建播放器控制器实例
|
|
|
- * @param name 控制器名称
|
|
|
- * @return 播放器控制器智能指针
|
|
|
- */
|
|
|
- virtual std::unique_ptr<IPlayerController> createPlayerController(const std::string& name = "") = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取默认播放器配置
|
|
|
- * @return 默认配置
|
|
|
- */
|
|
|
- virtual Types::PlayerConfig getDefaultConfig() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取支持的媒体格式列表
|
|
|
- * @return 支持的格式列表
|
|
|
- */
|
|
|
- virtual std::vector<std::string> getSupportedFormats() = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * 检查是否支持指定格式
|
|
|
- * @param format 媒体格式
|
|
|
- * @return 是否支持
|
|
|
- */
|
|
|
- virtual bool isFormatSupported(const std::string& format) = 0;
|
|
|
-};
|
|
|
-
|
|
|
-} // namespace Core
|
|
|
-} // namespace AVPlayer2
|
|
|
-
|
|
|
-#endif // IPLAYERCONTROLLER_H
|