WingRecorder/IWingRecorder/IWingEngine.cs

582 lines
15 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Media;
namespace IWingRecorder
{
[Flags]
public enum CursorEffect
{
/// <summary>
/// 无效果
/// </summary>
None = 0,
/// <summary>
/// 鼠标高亮
/// </summary>
Highlight = 1,
/// <summary>
/// 鼠标左击效果
/// </summary>
LeftClick = 2,
/// <summary>
/// 鼠标右击效果
/// </summary>
RightClick = 4,
/// <summary>
/// 鼠标点击效果
/// </summary>
ClickColor = LeftClick | RightClick,
/// <summary>
/// 鼠标移动轨迹效果
/// </summary>
Track = 8,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
ClickSound = 16,
/// <summary>
/// 已知的所有效果
/// </summary>
KnownAll = 31,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
Reserve1 = 32,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
Reserve2 = 64,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
Reserve3 = 128
}
public enum POSITION
{
/// <summary>
/// 左上角
/// </summary>
POSITION_TOP_LEFT,
/// <summary>
/// 顶部居中
/// </summary>
POSITION_TOP,
/// <summary>
/// 右上角
/// </summary>
POSITION_TOP_RIGHT,
/// <summary>
/// 右侧居中
/// </summary>
POSITION_RIGHT,
/// <summary>
/// 右下角
/// </summary>
POSITION_BOTTOM_RIGHT,
/// <summary>
/// 底部居中
/// </summary>
POSITION_BOTTOM,
/// <summary>
/// 左下角
/// </summary>
POSITION_BOTTOM_LEFT,
/// <summary>
/// 左侧居中
/// </summary>
POSITION_LEFT,
/// <summary>
/// 居中
/// </summary>
POSITION_CENTER,
/// <summary>
/// 自定义位置
/// </summary>
POSITION_MANUAL
}
public enum RecordingState
{
/// <summary>
/// 就绪,表示已停止
/// </summary>
Ready,
/// <summary>
/// 正在录制中
/// </summary>
Recording,
/// <summary>
/// 表示被暂停
/// </summary>
Paused,
/// <summary>
/// 继续
/// </summary>
Resume,
Stop = Ready,
Start = Recording
}
public enum WaterMarkType
{
/// <summary>
/// 无水印
/// </summary>
None,
/// <summary>
/// 文本水印
/// </summary>
Text,
/// <summary>
/// 图片水印
/// </summary>
Picture,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
Reserve1,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
Reserve2,
/// <summary>
/// 保留,为插件提供使用
/// </summary>
Reserve3
}
public enum Quality
{
LowQuality,
StandardQuality,
HighQualify
}
public class FormatInfo
{
public string Name { get; set; } = string.Empty;
public bool IsVideo { get; set; } = false;
}
public interface IWingEngine : IWingBaseInfo, INotifyPropertyChanged
{
#region
/// <summary>
/// 指示录制插件是否可以支持录制视频
/// </summary>
bool IsSupportRecordVideo { get; }
/// <summary>
/// 指示录制插件是否可以支持录制摄像头
/// </summary>
bool IsSupportRecordAudio { get; }
/// <summary>
/// 指示插件支持添加鼠标特效,如果为 None 则表示一个鼠标特效不支持
/// </summary>
CursorEffect SupportCursorEffect { get; }
/// <summary>
/// 指示插件是否可以支持自定义区域设置
/// </summary>
bool IsSupportSelectRecordRegion { get; }
/// <summary>
/// 指示插件是否可以支持录制摄像头
/// </summary>
bool IsSupportRecordCamera { get; }
/// <summary>
/// 指示插件是否可以录制鼠标
/// </summary>
bool IsSupportRecordMouse { get; }
/// <summary>
/// 指示插件是否支持水印
/// </summary>
bool IsSupportWaterMark { get; }
/// <summary>
/// 指示插件是否可以支持屏幕截屏
/// </summary>
bool IsSupportScreenShot { get; }
/// <summary>
/// 插件支持的截屏图片格式
/// </summary>
string[] SupportScreenShotFormat { get; }
/// <summary>
/// 指示插件是否支持在录制中边界可变的情况下,
/// 是否支持平滑过渡
/// </summary>
bool IsSupportZoomInScreen { get; }
/// <summary>
/// 所有支持的录制格式
/// </summary>
IReadOnlyList<FormatInfo> SupportRecordingFormats { get; }
#endregion
#region
#region
/// <summary>
/// 是否录制输出性音频,比如音响输出、耳机输出
/// </summary>
bool IsRecordOutputAudio { get; set; }
/// <summary>
/// 是否录制时输入性音频,比如麦克风
/// </summary>
bool IsRecordInputAudio { get; set; }
/// <summary>
/// 设置录制系统音量,数值羽云录屏使用 0-100 区间,保证实现接口时此设置不会影响到系统真实音量
/// </summary>
int SystemAudioVolume { get; set; }
/// <summary>
/// 设置录制时录制源音量,数值羽云录屏使用 0-100 区间,保证实现接口时此设置不会影响到真实音量
/// </summary>
int RecordingAudioVolume { get; set; }
/// <summary>
/// 在处于录制模式时,是否可以不能变动录制边界
/// </summary>
bool LockBorder { get; }
/// <summary>
/// 指示是否可以自定义声音音量
/// </summary>
bool IsSupportSoundCustom { get; }
/// <summary>
/// 设置音频波特率
/// </summary>
int AudioBitrate { get; set; }
/// <summary>
/// 设置或获取录制区域,如果为 null 表示全屏录制
/// </summary>
Rect? RecordingArea { get; set; }
/// <summary>
/// 获取当前录制格式
/// </summary>
string CurrentRecordingFormat { get; }
/// <summary>
/// 获取当前截图格式
/// </summary>
string CurrentScreenShotFormat { get; }
/// <summary>
/// 表示当前设置的录制品质
/// </summary>
Quality CurrentRecordingQuality { get; set; }
/// <summary>
/// 指示是否使用插件系统计时来获取录制时间
/// </summary>
bool UsingAddinSystemClock { get; }
#endregion
#region
/// <summary>
/// 指示是否使用录制时播放点击声音
/// </summary>
bool UsingClickSound { get; set; }
/// <summary>
/// 指示是否使用录制时鼠标高亮颜色
/// </summary>
bool UsingHilightColor { get; set; }
/// <summary>
/// 设置录制时鼠标高亮颜色
/// </summary>
Color HilightColor { get; set; }
/// <summary>
/// 指示是否使用录制时鼠标点击高亮颜色
/// </summary>
bool UsingClickColor { get; set; }
/// <summary>
/// 设置录制时鼠标左击高亮颜色
/// </summary>
Color LeftClickColor { get; set; }
/// <summary>
/// 设置录制时鼠标右击高亮颜色
/// </summary>
Color RightClickColor { get; set; }
/// <summary>
/// 指示是否使用录制时鼠标移动时轨迹的高亮颜色
/// </summary>
bool UsingTrackColor { get; set; }
/// <summary>
/// 设置录制时鼠标移动时轨迹的高亮颜色
/// </summary>
Color TrackColor { get; set; }
/// <summary>
/// 是否录制鼠标
/// </summary>
bool IsRecordingMouse { get; set; }
#endregion
#region
/// <summary>
/// 获取录制时间秒数
/// </summary>
ulong RecordingTime { get; }
/// <summary>
/// 获取录制状态
/// </summary>
RecordingState RecordingState { get; }
/// <summary>
/// 如果 LockBorder 值为假,说明在录制中可以修改录制边界,
/// 此时平滑过渡肯定是非常好的,这里就是设置改帧率的,
/// 该属性只在 IsSupportZoomInScreen 为真的时候有效
/// </summary>
int ZoomInScreenRatio { get; set; }
/// <summary>
/// 如果 LockBorder 值为假,说明在录制中可以修改录制边界,
/// 此时平滑过渡肯定是非常好的,这里就是设置改切换速率的,
/// 该属性只在 IsSupportZoomInScreen 为真的时候有效
/// </summary>
int ZoomSpeed { get; set; }
/// <summary>
/// 输入音频的音量,请保证 0-100
/// </summary>
int InputRealTimeAudioVolume { get; }
#endregion
#region
/// <summary>
/// 获取输入性设备数量
/// </summary>
int InputAudioDeviceCount { get; }
/// <summary>
/// 获取所有输入性设备名称
/// </summary>
string[] InputAudioDevice { get; }
/// <summary>
/// 获取输出性设备数量
/// </summary>
int OutputAudioDeviceCount { get; }
/// <summary>
/// 获取所有输出性设备名称
/// </summary>
string[] OutputAudioDevice { get; }
#endregion
#region
/// <summary>
/// 获取摄像头设备个数
/// </summary>
int CamDeviceCount { get; }
/// <summary>
/// 获取所有摄像头名称
/// </summary>
string[] AllCamDevice { get; }
/// <summary>
/// 是否显示摄像头影像
/// </summary>
bool PreviewWebcam { get; set; }
/// <summary>
/// 设置或获取摄像头影响窗体大小
/// </summary>
Size WebcamViewSize { get; set; }
/// <summary>
/// 是否翻转摄像头影像
/// </summary>
bool FlippingWebcam { get; set; }
/// <summary>
/// 是否镜像摄像头影像
/// </summary>
bool MirroringWebcam { get; set; }
#endregion
#region
/// <summary>
/// 水印类型
/// </summary>
WaterMarkType WaterMarkType { get; set; }
/// <summary>
/// 水印图片的位置
/// </summary>
string WaterMarkPicPath { get; set; }
/// <summary>
/// 水印文本
/// </summary>
string WateMarkText { get; set; }
/// <summary>
/// 水印文本颜色
/// </summary>
Color WateMarkTextColor { get; set; }
/// <summary>
/// 表示水印区域
/// </summary>
Rect LogoRect { get; set; }
/// <summary>
/// 水印不透明度
/// </summary>
double LogoOpacity { get; set; }
/// <summary>
/// 插件支持的水印格式
/// </summary>
string[] SupportedPicMarkExt { get; }
/// <summary>
/// 是否支持图片水印
/// </summary>
bool IsSupportPicMark { get; }
/// <summary>
/// 是否支持文字水印
/// </summary>
bool IsSupportTextMark { get; }
/// <summary>
/// 文字水印字体
/// </summary>
Utilities.WingFont LogoFont { get; set; }
#endregion
#endregion
/// <summary>
/// 开始录制
/// </summary>
/// <param name="filename">录制文件</param>
/// <returns></returns>
bool StartRecording(string filename);
/// <summary>
/// 结束录制
/// </summary>
/// <returns></returns>
bool StopRecording();
/// <summary>
/// 暂停录制
/// </summary>
/// <returns></returns>
bool PauseRecording();
/// <summary>
/// 继续录制
/// </summary>
/// <returns></returns>
bool ResumeRecording();
/// <summary>
/// 设置摄像头
/// </summary>
/// <param name="nIndex">摄像头对应的索引ID</param>
/// <returns></returns>
bool SelectCameraDevice(int nIndex);
/// <summary>
/// 截屏
/// </summary>
/// <param name="Path">保存路径</param>
/// <param name="rect">截屏区域的矩形区域,建议为 null 的时候截全屏</param>
/// <returns></returns>
bool TakeScreenshot(StringBuilder Path, Rect? rect);
/// <summary>
/// 截屏
/// </summary>
/// <param name="Path">保存路径</param>
/// <param name="left">距离屏幕左边的距离</param>
/// <param name="top">距离屏幕上面的距离</param>
/// <param name="right">距离屏幕右边的距离</param>
/// <param name="bottom">距离屏幕下面的距离</param>
/// <returns></returns>
bool TakeScreenshot(StringBuilder Path, int left, int top, int right, int bottom);
/// <summary>
/// 获得指定索引的摄像头名称
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
string GetCamName(int nIndex);
/// <summary>
/// 获得指定索引的输出性声源名称,比如扬声器
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
string GetOutputAudioDeviceName(int nIndex);
/// <summary>
/// 获得指定索引的输入性声源名称,比如麦克风
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
string GetInputAudioDeviceName(int nIndex);
/// <summary>
/// 设置当前录制格式
/// </summary>
/// <param name="format"></param>
/// <returns></returns>
bool SetCurrentRecordingFormat(string format);
/// <summary>
/// 设置当前截屏格式
/// </summary>
/// <param name="format"></param>
/// <returns></returns>
bool SetCurrentScreenShotFormat(string format);
}
}