/*
* LitePlayer.h
*
* Created on: 2015年1月9日
* Author: zhengchuanjiang
*/
#ifndef LITEPLAYER_H_
#define LITEPLAYER_H_
#include "MediaFrameSink.h"
#include "MediaPacketSink.h"
#include "MediaEventSink.h"
#include "OsdStruct.h"
#include "PlayerControl.h"
class LitePlayer
{
public:
virtual ~LitePlayer() {}
/**
* 打开媒体流
* @param url 媒体流URL
* @return 0 表示成功
*/
virtual int open(const char* url) =0;
/**
* 关闭媒体流
*/
virtual void close() =0;
/**
* 媒体流是否打开
* @return true 表示媒体流已经打开就绪
*/
virtual bool isOpen() =0;
/**
* 获取媒体URL
* @return URL
*/
virtual const char* getURL() =0;
/**
* 获取媒体流格式
* @param fmt
* @return true 表示成功
*/
virtual bool getFormat(MediaFormat& fmt) =0;
/**
* 获取媒体流时长,单位为毫秒
* @return 媒体流时长,如果是实时流,返回0
*/
virtual int getDuration() =0;
/**
* 播放
* return 0 表示成功
*/
virtual int play() =0;
virtual int pause() =0;
virtual void stop() =0;
/**
* 获取播放状态
* @return 播放状态,@see StreamState
*/
virtual int getState() =0;
/**
* 判断是否可定位
* @return true 表示可定位
*/
virtual bool seekable() =0;
/**
* 定位到指定时间点
* @param offset 时间点,单位为毫秒,不应超过 duration
* @return 0 表示成功
*/
virtual int seek(int64_t offset) =0;
/**
* 获取当前已播放时长
* @return 播放时间,单位为毫秒
*/
virtual int64_t getTime() =0;
/**
* get percent position
* @return [0.0, 1.0]
*/
virtual double getPosition() =0;
/**
* set position
* @param pos must be in [0.0, 1.0]
* @return
*/
virtual int setPosition(double pos) =0;
/**
* 设置播放速度,正常播放速度为 1.0
* @param scale 播放速度,取值范围: [1/8, 8]
* @return 0 表示成功
*/
virtual int setScale(double scale) =0;
/**
* 获取播放速度
* @return 播放速度
*/
virtual double getScale() =0;
/**
* get current volume
* @return [0.0, 1.0]
*/
virtual double getVolume() =0;
/**
* 设置音量
* @param vol 音量,取值范围为:[0, 1.0]
* @return
*/
virtual int setVolume(double vol) =0;
virtual bool isMute() =0;
/**
* 设置静音
* @param muted true表示静音, false表示打开声音
* @return 0 表示成功
*/
virtual int setMute(bool muted) =0;
virtual bool isFullscreen() =0;
/**
* 设置全屏
* @param full 表示全屏
* @return 0 表示成功
*/
virtual int setFullscreen(bool full) =0;
/**
* 设置视频显示窗口
* @param hwnd
* @return
*/
virtual void setVideoWnd(HWND hwnd) =0;
/**
* 设置视频宽高比率
* 如果width,height = 0, 保持视频的原始比率
* @param width
* @param height
* @return 0 on success
*/
virtual int setRatio(int width, int height) =0;
virtual void getRatio(int& width, int& height) =0;
/**
* 设置播放器logo
* @param filepath
* @return
*/
virtual int setImage(const char* filepath) =0;
/**
* 抓图
* @param filepath 图片路径
* @return 0 表示成功
*/
virtual int snap(const char* filepath) =0;
/**
* 设置过滤器, 参考avfilter设置
* @param filterString
* @return 0 表示成功
*/
virtual int setVideoFilter(const char* filterString) =0;
/**
* 设置OSD叠加
* @param num 序号, 取值范围为[0,4]
* @param pOverlay OSD,为NULL表示删除
*/
virtual int setOverlay(int num, OsdOverlay* pOverlay) =0;
/**
* 清理OSD叠加
*/
virtual void resetOverlay() =0;
/**
* 设置解码回调
* @param pSink 接收解码后的媒体帧
*/
virtual void setFrameSink(MediaFrameSink* pSink) =0;
/**
* 设置媒体流回调
* @param pSink 接收未解码媒体包
*/
virtual void setPacketSink(MediaPacketSink* pSink) =0;
virtual void setEventSink(MediaEventSink* pSink) =0;
/**
* 允许控制条显示
* @param enabled
* @return
*/
virtual void enableControl(bool enabled) =0;
virtual bool isControlEnabled() =0;
virtual void setControl(PlayerControl* control) =0;
/**
* 获取属性
* @param name 属性名
* @return 属性值
*/
virtual const char* getProp(const char* name) =0;
/**
* 设置属性
* @param name 属性名称
* @param value 属性值
* @return 0 表示成功
*/
virtual int setProp(const char* name, const char* value) =0;
virtual int togglePlay() =0;
virtual int toggleMute() =0;
virtual int toggleFull() =0;
/**
* 减速播放
* @return
*/
virtual int slow() =0;
/**
* 快速播放
* @return
*/
virtual int fast() =0;
};
/**
* 播放器工厂
*/
class DLLEXPORT LitePlayerFactory
{
public:
static bool startup();
static void cleanup();
/**
* 创建播放器
* @param hwnd
* @return NULL if failed
*/
static LitePlayer* create(HWND hwnd);
/**
* 销毁播放器
* @param pPlayer
*/
static void destroy(LitePlayer* pPlayer);
//static const char* getProp(const char* name);
//static int setProp(const char* name, const char* value);
};
#endif /* LITEPLAYER_H_ */