582 lines
15 KiB
C#
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);
|
|
}
|
|
}
|