监控视频控件
# Smart 控件使用(监控视频)
该分类中集合了用于处理本地网络摄像头和IP摄像头组件,通过IP网络传输视频,组织视频聊天,录制音频和视频文件,以及展示的功能。
# 1. TVideoClient 组件
TVideoClient是一个视频串流客户端组件,用来捕获网络摄像头视频流并转化成视频。
TVideoClient有三个重要属性分别是:CamType
摄像头类型,Url
摄像头网终地址,Active
激活。

- CamType属性说明
- ctESP32_CAM:ESP32-CAM摄像头
- ctCAM:非ESP32-CAM摄像头
Begin
FThis.VideoClient1.Url :='http://192.168.1.115'; //摄像头网络地址
FThis.VideoClient1.Active := true;//激活控件
End;
2
3
4
# 2. TVideoServer 组件
TVideoServer是一个将USB摄像头视频通过HTTPServer流推出去的组件,还可以进行录像功能,配合 TVideoClient 视频客户端组件使用。
# 2.1. 属性(Propertys)
- TVideoServer主要属性说明
- AudioDeviceName:麦克风属性,可指定视频录音的麦克风。
- DeviceName:USB摄像头列表,指定摄像头。
- CameraOptions:摄像头配置
- Active:摄像头是否激活。
- AspectRatio:是否保持纵横比。
- BorderColor:控件的背景颜色。
- CaptureType:视频捕获类型(
ctAuto
,ctGrabber
,ctVmr9
)。 - OutputFileName:输出视频文件名。
- OutputFileType:输入视频文件类型。
- BarCode:是否进行条码识别。
- BarCodeInterval:条码识别频率。
# 2.2. 方法(Methods)
- TVideoServer组件主要方法列表
方法 | 方法说明 |
---|---|
StartDevice | 启动设备 |
StopDevice | 停止设备 |
TakePicture | 拍摄照片 |
ShowPropertyDialog | 显示摄像头属性配置对话框 |
# 2.2.1. StartDevice
启动相机设备。
procedure StartDevice;
# 2.2.2. StopDevice
停止相机设备。
procedure StartDevice;
# 2.2.3. ShowPropertyDialog
现实相机属性对话框。
procedure ShowPropertyDialog;
# 2.2.4. TakePicture
截取当前摄像头的画面。
function TakePicture:string;
# 2.3. 事件
- TVideoServer组件主要事件
# 2.3.1. OnBarCode
识别条码成功时触发该事件,并反馈识别的条码内容。
procedure VideoServer1OnBarCode (const BarCode: string);
begin
//BarCode 识别的条码内容
end;
2
3
4
# 3. TVNCClientWrapper组件
VNC客户端组件,通过此组件可能连接到指定的VNC服务端。
- TVNCClientWrapperr组件主要属性
属性 | 功能说明 |
---|---|
Host | VNCServer 服务器地址 |
Port | VNCServer 服务器端口 |
ZlibLevel | Zlib压缩级别(默认为1) |
Listen: Boolea | 接收来自VNC服务器的连接。(默认值= 0) |
AutoReconnect | 如果因为发生错误而取消连接,请提供重新连接到远程服务器。(默认= 1) |
MenuKey | 弹出菜单的键(默认=F8) |
Monitor | 打开VNC查看器窗口的监视器(如果可用)。 |
AcceptBell | 当服务器要求时,发出系统提示音。(默认= 1) |
Emulate3 | 模拟鼠标中键,当左右键同时使用时。(默认值= 0) |
PointerEventDelay | 从发送一个指针事件到发送下一个指针事件之间的间隔时间。(默认值= 0) |
Protocol33 | 只使用协议3.3版本(默认=0) |
DisableWinKeys | 将特殊的Windows密钥直接传递给服务器。 |
ServerCutText | 接受来自服务器的剪贴板更改。(默认= 1) |
ClientCutText | 将剪贴板更改发送到服务器。(默认= 1) |
SendKeyEvents | 向服务器发送按键(和释放)。(默认= 1) |
SendPointerEvents | 发送指针(鼠标)事件到服务器。(默认= 1) |
Shared | 允许到服务器的现有连接继续。(默认是断开所有其他客户端)(默认=0) |
AutoSelect | 自动选择像素格式和编码(默认值为1) |
PreferredEncoding | 使用的首选图形编码-如果设置为自动选择覆盖(ZRLE, Hextile或Raw)(默认=ZRLE) |
FullScreen | 使用整个显示来显示远程桌面。(按MenuKey进入查看器菜单)(默认=0) |
LowColourLevel | 颜色级别,用于低速连接。0 =非常低(8种颜色),1 =低(64种颜色),2 =中等(256种颜色)(默认值为1) |
FullColour | 使用全彩(默认是使用低颜色,除非自动选择决定链接足够快)。(默认值= 0) |
UseDesktopResize | 支持动态桌面调整(默认=1) |
UseLocalCursor | 本地渲染鼠标光标(默认=1) |
DebugDelay | 毫秒显示反转的像素数据-一个调试特性(默认值为0) |
# 3.1. 方法(Methods)
方法 | 功能说明 |
---|---|
IsActive | 指示VNCClient远程状态 |
Start | 开启VNCClient远程控制 |
Connect | 连接VNCClient远程控制 |
Disconnect | 断开VNCClient远程控制 |
# 3.1.1. IsActive函数
function IsActive: Boolean;
# 3.1.2. Start函数
function Start: Boolean;
# 3.1.3. Connect函数
function Connect: Boolean; overload;
function Connect(AHost: string; APort: word = 5900): Boolean; overload;
2
# 3.1.4. Disconnect函数
function Disconnect: Boolean;
# 4. TVNCServerWrapper组件
VNC服务端组件,开启此组件可接受VNC客户端发送的连接请求。
# 4.1. 属性(Properties)
- TVNCServerWrapper组件主要属性
属性 | 功能说明 |
---|---|
MaxCutText | 传入剪贴板更新的最大允许长度(默认值为262144) |
PollConsoleWindows | 服务器应该轮询控制台窗口的更新(默认值为1) |
ZlibLevel | Zlib压缩级别(默认为1) |
UseCaptureBlt | 使用更慢的捕获方法,确保alpha混合窗口正确显示(默认值=True) |
DeadKeyAware | 是否假设查看器已经将死键序列解释为latin-1字符(默认值=True) |
QueryConnect | 提示本地用户接受或拒绝传入的连接。(默认值=False) |
SendCutText | 将剪贴板更改发送到客户端。(默认值=True) |
AcceptCutText | 接受客户端的剪贴板更新。(默认= 1) |
AcceptPointerEvents | 从客户端接受指针按下和释放事件 |
AcceptKeyEvents | 从客户端接受按键按下和释放事件。(默认= 1) |
DisconnectClients | 如果传入连接是非共享的,则断开现有客户端。 |
NeverShared | 无论客户端指定的设置是什么,都不要将传入的连接视为共享的(默认值为0) |
AlwaysShared | 始终将传入连接视为共享连接,而不考虑客户端指定的设置(默认值为0) |
Protocol33 | 始终使用协议3.3版本向后兼容行为不佳的客户端(默认=0) |
CompareFB | 在framebuffer上执行像素比较,减少不必要的更新(默认=1) |
ClientWaitTimeMillis | 等待客户端不再响应的毫秒数(默认值为20000) |
IdleTimeout | 丢弃空闲VNC连接的秒数(0表示没有超时)(默认值为3600) |
RemapKeys | 要重新映射的传入键码的逗号分隔列表。映射表示为两个十六进制值,以0x为前缀,以->分隔(默认=) |
BlacklistTimeout | 首次将主机列入黑名单时应用的初始超时。直到超时过期,主机才能重新尝试连接。(默认= 10) |
BlacklistThreshold | 未通过身份验证的连接尝试的数量,在该主机被列入黑名单之前允许的任何主机连接尝试的数量(默认值为5) |
Password | 客户端访问服务器时必须提供的密码的模糊二进制编码(默认=) |
PasswordFile | VNC认证密码文件(默认=) |
ReverseSecurityType | 指定用于反向连接的加密方案(无)(默认=无) |
SecurityType | 指定用于传入连接的安全方案(None, VncAuth)(默认=VncAuth) |
DisableEffects | 当服务器在使用时,禁用桌面用户界面效果。(默认值= 0) |
RemovePattern | 在使用服务器时删除桌面背景模式。(默认值= 0) |
RemoveWallpaper | 当服务器使用时,移除桌面壁纸。(默认值= 0) |
DisplayDevice | 显示要远程监控的设备名,或空出整个桌面。(默认=) |
DisconnectAction | 所有客户端断开连接时执行的操作。(None, Lock, Logoff) (default=None) |
DisableLocalInputs | 在服务器使用时禁用本地键盘和指针输入(默认值为0) |
UpdateMethod | 如何发现桌面更新;0 -轮询,1 -应用挂钩,2 -驱动挂钩。(默认= 1) |
QueryOnlyIfLoggedOn | 只有在有用户登录时才提示本地用户接受传入连接(默认值为0) |
LocalHost | 只接受来自本地环回网络接口的连接(默认=0) |
Hosts | 过滤器描述允许哪些主机访问此服务器(默认=+0.0.0.0/0.0.0.0) |
PortNumber | 服务器接受连接的TCP/IP端口(默认=5900) |
HTTPPortNumber | TCP/IP端口,服务器将在该端口上提供Java applet VNC查看器(默认值为5800) |
DisableClose | 关闭VNC服务器托盘菜单中的关闭条目。(默认值= 0) |
DisableOptions | 禁用VNC服务器托盘菜单中的选项条目。(默认值为0)-未导出 |
QueryConnectTimeout | 拒绝连接前显示接受连接对话框的秒数(默认值为10) |
# 4.2. 方法(Methods)
方法 | 功能说明 |
---|---|
IsActive | 指示VNCServer状态 |
Start | 开启VNCServer服务 |
Stop | 停止VNCServer服务 |
Restart | 重新VNCServer服务 |
# 4.2.1. IsActive函数
function IsActive: Boolean;
# 4.2.2. Start函数
function Start: Boolean;
# 4.2.3. Stop函数
function Stop: Boolean;
# 4.2.4. Restart函数
function Restart: Boolean;
# 5. TRVCamera 组件
TRVCamera需与相机配合使用实现搜索,配置,接收视频流,保存或播放视频文件的功能。
TRVCamera接收到的视频可以显示在TRVCamView或TRVCamMultiView组件中。 相机的移动由TRVCamControl组件控制或者自行手动调整控制。
可以将TRVCamera指定为TRVCamSender的VideoSource(视频源)。
您可以使用TRVCamRecorder从TRVCamera录制视频。
TRVCamera可以从以下来源接收视频:
- 来自网络的IP摄像机(MJPEG,更新的JPEG,一个周期更新的JPEG文件集,H.264流)
- RTSP(包含H.264和MPEG-4第2部分视频数据的AVI和MP4文件,MJPEG流,H.264流)
- HTTP(MJPEG流,H.264流,包含H.264和MPEG-4第2部分视频数据的AVI和MP4文件)
- USB网络摄像头;
- 屏幕(桌面);
- 视频文件(如果安装了必要的编解码器)。
您可以通过DeviceType属性选择视频源。 在分配必要的属性(取决于源类型)后,调用PlayVideoStream方法。 视频可以录制到MJPEG文件并从MJPEG文件播放。
# 5.1. 属性
属性 | 属性说明 |
---|---|
Aborting | 当组件正在中止当前操作时返回True |
FramePerSec | 设定帧速率 |
FramePerSecInt | 当帧速率需要被设定为整数时,该属性显示的是FramePerSec属性的舍入整数值,最小值为1 |
Agent | 使用HTTP协议连接时,此属性将作为用户代理字段(user-agent)发送 |
Bitrate | 返回并允许更改视频比特率 |
Brightness | 读取/改变视频亮度 |
CameraControl | 指定用于控制相机的控制控件 |
CameraHost | 指定摄像机的地址 |
CameraPort | 指定摄像机的端口 |
CameraSearchTimeOut | 指定搜索相机超时的时间 |
CommandMode | 定义组件如何向摄像机发送命令的模式 |
Contrast | 读取/改变视频对比度 |
CycleVideoImages | 是否开启循环读取模式 |
DeviceType | 指定源视频设备类型 |
DesktopMode | 指定视频的显示方式 |
DesktopRect | 当DesktopMode=rvdmRect时,该属性用于指定显示的矩形区域 |
DesktopWindowHandle | 当DesktopMode=rvdmWindow时,指定其显示的窗体句柄 |
DesktopZoomPercent | 缩放视频帧大小的百分比 |
FFMpegProperty | 配置FFmpeg视频属性,其中UseFFmpeg决定是否启用FFmpeg |
FileName | 录制的视频名称 |
FlipHorizontally | 视频是否水平翻转 |
FlipVertically | 视频是否垂直翻转 |
FocusDistance | 对焦距离的模式设定,当FocusType属性为rvcfFocusAuto时使用 |
FocusType | 对焦类型设定 |
GStreamerProperty | GStreamer的属性设置 |
Hue | 读取/改变视频色调 |
IPCameraTypes | 摄像机的型号 |
JpegIntegrity | 图片文件的完整性检查方式 |
MaxCameraSearchThreadCount | 指定最大的摄像机搜索线程数 |
MaxUsers | MaxUsers返回摄像机支持的最大用户数,用户允许管理摄像机的用户(需要管理员权限) |
Parameters | 此属性包含返回有关IP摄像机的信息的子属性(如果摄像机支持) |
RTSPPort | 指定摄像机RTS协议的端口号 |
Quality | 指定视频品质的偏好设置 |
Rotation | 在发送视频前旋转视频帧 |
Saturation | 读取/改变视频饱和度 |
Searching | 读取当前是否处于搜索状态 |
Sharpness | 读取/改变视频锐度 |
SmoothImage | 顺滑视频帧 |
SourceFileName | DeviceType = rvdtFile时,指定的源文件的名称 |
ToFile | 是否将录制的视频制作为文件保存 |
URL | 使用RTSP、HTTP协议获取视频流时获取的地址信息 |
UserAccess | 指定摄像机的访问模式 |
UserName | 指定登陆摄像机的用户名 |
UserPassword | 指定登陆摄像机的密码 |
Users | 指定登陆的用户属性的配置 |
VideoDeviceCount | 视频源设备数量 |
VideoDeviceIndex | 视频源设备编号序号 |
VideoDeviceIdList | 摄像头标识符的列表数组 |
VideoDeviceList | 摄像机设备的列表数组 |
VideoFormat | 视频的格式 |
VideoImagesURLs | 当设定CycleVideoImages = Ture时,循环读取视频的链接列表 |
VideoMode | 视频的播放模式 |
# 5.1.1. Aborting 属性
property Aborting: Boolean; // 只读属性
当组件正在中止当前操作时返回True。
if This.RVCamera1.Aborting then
ShowMessage('当前组件正在中止操作');
2
# 5.1.2. FramePerSec, FramePerSecInt 属性
property FramePerSec: Double;
property FramePerSecInt: Integer; // 只读属性
2
如果视频源(例如IP摄像机)支持修改帧数,则修改FramePerSec属性可更改每秒帧数值(帧速率)。 此外,TRVCamera在播放MJPEG文件时也会使用此属性。 如果DeviсeType = rvdtWebCamera,rvdtDesktop或rvdtUserData,或者在播放MJPEG文件时,该属性可以使用小数值。 否则,它会被舍入为整数值(最小值1)。 在FramePerSecInt属性中会返回该整数值。 TRVCamReceiver中将忽略此属性。
This.RVCamera1.FramePerSec := 25;
# 5.1.3. Agent 属性
property Agent: String;
使用HTTP协议连接时,此属性将作为用户代理字段(user-agent)发送,该属性是可选填的。
This.RVCamera1.Agent := 'IP Camera';
# 5.1.4. Bitrate 属性
property Bitrate: Integer;
返回并允许更改视频比特率。 当DeviceType = rvdtRTSP和rvdtHTTP时,指定GStreamer的比特率范围是0~2097152(0表示自动计算的比特率) 当DeviceType = rvdtIPCamera时,MJPEG Foscam相机,范围:适用于MJPEG:1200~115200,适用于H.264:20480~2097152 要应用这些值,请在TRVCamera连接到设备时更改它们。 如果摄像机支持这些属性,则在组件连接到摄像机时会从摄像机接收它们的值,请参阅SearchCamera属性。
//该属性的默认值不会被应用,在连接到相机时会被覆盖。
This.RVCamera1.Bitrate := 2097512;
2
# 5.1.5. Brightness, Contrast, Hue, Saturation, Sharpnes 属性
property Brightness: Integer;
property Contrast: Integer;
property Hue: Integer;
property Saturation: Integer;
property Sharpness: Integer;
2
3
4
5
该几项属性是图像显示设置,包含亮度、对比度、色调、饱和度、锐度设置。
Brightness/Contrast(亮度、对比度):
当DeviceType = rvdtDesktop时,取值范围为0..255(中间值为128),由控件实现调整。 当DeviceType = rvdtIPCamera时,对于MJPEG和H.264 Foscam相机,取值范围为0..100。Hue/Saturation(色调/饱和度):
当DeviceType = rvdtIPCamera时,H.264 Foscam相机取值范围为0..100。Sharpness(锐度):
当DeviceType = rvdtRTSP和rvdtHTTP时,指定GStreamer的比特率,取值范围为50..150(中间值为100)。 当DeviceType = rvdtIPCamera时,对于H.264 Foscam相机,取值范围为0..100。
要应用这些值,请在TRVCamera连接到设备时更改它们。 如果摄像机支持这些属性,则在组件连接到摄像机时会从摄像机接收它们的值,请参阅SearchCamera属性。
//该属性的默认值不会被应用,在连接到相机时会被覆盖。
This.RVCamera1.Brightness := 96;
This.RVCamera1.Contrast := 4;
This.RVCamera1.Hue := 50;
This.RVCamera1.Saturation := 50;
This.RVCamera1.Sharpness := 50;
2
3
4
5
6
# 5.1.6. CameraControl 属性
property CameraControl: TRVCamControl;
指定用于控制摄像机移动的TRVCameraControl组件(需当前摄像机支持控制才可使用该属)。如果将此组件分配给TRVCamMultiView中某个查看器的VideoSource,则此属性由TRVCamMultiView维护,请参阅TRVCamMultiView.CameraControl属性。
This.RVCamera1.CameraControl := This.RVCamControl1;
# 5.1.7. CameraHost, CameraPort, RTSPPort 属性
property CameraHost: String;
property CameraPort: Integer;
property RTSPPort: Integer;
2
3
指定IP摄像机的主机地址和端口。 仅当DeviceType = rvdtIPCamera时才使用这些属性。 如果摄像机的视频协议是RTSP,它可能会使用不同的端口来执行命令和视频流。 在这种情况下,请在CameraPort中指定命令的端口,在RTSPPort中指定视频的端口。 CameraPort / RTSPPort还需与URL属性一起使用。
如果CycleVideoImages = True,则从VideoImagesURL中指定的文件中读取来自IP摄像机的视频。 sc要从摄像头播放视频,请先调用SearchCamera,然后调用PlayVideoStream。 注意:如果SearchCamera创建了摄像机,并且此摄像机不是由Foscam,Axis,D-Link或Panasonic制造的可控摄像机,则会清除CameraHost和CameraPort属性,并将视频流的地址分配给URL。
This.RVCamera1.CameraHost := '192.168.1.10';
This.RVCamera1.CameraPort := 9800;
This.RVCamera1.RTSPort := 9801;
2
3
# 5.1.8. CameraSearchTimeOut 属性
property CameraSearchTimeOut: Integer;
指定摄像机搜索的超时间隔,以毫秒(ms)为单位。设定较小的值可以加快搜索相机的速度,但是会增加忽视相机的概率。
This.RVCamera1.CameraSearchTimeOut := 3000;
# 5.1.9. CommandMode 属性
type
TRVSendMode = (rvsmWait, rvsmNoWait); // defined in MRVType unit
property CommandMode: TRVSendMode
2
3
定义组件如何向摄像机发送命令的模式。
- rvsmWait:组件等待命令完成。
- rvsmNoWait:组件不等待命令。 命令完成后,将调用事件。
This.RVCamera1.CommandMode := rvsmWait;
# 5.1.10. CycleVideoImages, VideoImagesURLs 属性
property CycleVideoImages: Boolean;
property VideoImagesURLs: TStringList;
2
这些属性允许使用文件名列表来下载视频。
仅当DeviceType = rvdtIPCamera时才使用这些属性。
如果CycleVideoImages = True,则从VideoImagesURL中指定的位置循环读取视频。 这些位置将添加到CameraHost和CameraPort中。
This.RVCamera1.CycleVideoImages := True;
This.RVCamera1.VideoImagesURLs.Add('http://192.168.1.10/sample.mp4');
2
# 5.1.11. DesktopMode, DesktopRect, DesktopWindowHandle, DesktopZoomPercent 属性
type
TRVDesktopMode = (rvdmAll, rvdmRect, rvdmForm); // defined in MRVType unit
property DesktopMode: TRVDesktopMode;
property DesktopRect: TRect
property DesktopWindowHandle: THandle;
property DesktopZoomPercent: Integer
2
3
4
5
6
这些属性指定用于编码视频的桌面区域。
当DeviceType属性为rvdtDesktop时,DesktopMode属性可用,包含以下选项:
- rvdmFull:将整个桌面或者整个监视器作为显示区域,详情请参阅VideoDeviceIndex/VideoDeviceCount/VideoDeviceList/VideoDeviceIdList属性。
- rvdmRect:显示区域为DesktopRect属性中规定的矩形区域。
- rvdmWindow:如果指定了DesktopHandle,则打开一个新的程序窗口用于显示该区域内容。如果DesktopHandle=0,则使用主窗体进行显示。
DesktopZoomPercent用于缩放生成的视频帧。 例如,DesktopZoomPercent = 100,则保持帧不变(100%大小),DesktopZoomPercent = 50,则将其宽度和高度缩小到50%。 分配1..99范围内的值以减小帧大小,从而减少流量消耗。 也可以指定大于100的值来使帧变大。
//全屏显示
This.RVCamera1.DesktopMode := rvdmFull;
//指定显示区域
This.RVCamera1.DesktopMode := rvdmRect;
This.RVCamera1.DesktopRect.Left := 0;
This.RVCamera1.DesktopRect.Right := 960;
This.RVCamera1.DesktopRect.Top := 0;
This.RVCamera1.DesktopRect.Bottom := 540;
//指定显示窗体
This.RVCamera1.DesktopMode := rvdmWindow;
This.RVCamera1.DesktopWindowHandle := 0;
//指定显示的帧区域
This.RVCamera1.DesktopZoomPercent := 100;
2
3
4
5
6
7
8
9
10
11
12
13
14
# 5.1.12. DeviceType 属性
type
TRVDeviceType = (rvdtIPCamera, rvdtWebCamera, rvdtDesktop,
rvdtFile, rvdtRTSP, rvdtHTTP, rvdtUserData); // defined in MRVType unit
property DeviceType: TRVDeviceType;
2
3
4
指定源视频设备类型。
指定的视频格式和网络协议用于GStreamer; 对于FFmpeg,它们会被自动检测到。
值 | 说明 | GStreamer | FFmpeg |
---|---|---|---|
rvdtIPCamera | IP Camera通过HTTP或TCP生成MJPEG或H.264视频流 需要CameraHost:CameraPort或URL属性 视频格式需在VideoFormat中指定 | 不使用 | 不需要MJPEG |
rvdtWebCamera | 使用USB连接的网络摄像头,需要使用VideoDeviceIndex属性 | 不使用 | 不使用 |
rvdtDesktop | 使用屏幕作为视频源设备,需要使用DesktopMode属性 | 不使用 | 不使用 |
rvdtFile | 视频源为文件,需要使用SourceFileName属性 | 不使用 | 选择性使用 |
rvdtRTSP | 通过RTSP协议获取视频源,需要使用URL属性,视频格式在VideoFormat属性中规定 | 两者同时使用 | 两者同时使用 |
rvdtHTTP | 通过HTTP协议获取的视频源,需要使用URL属性,视频格式在VideoFormat属性中规定 | 不需要MJPEG,GStreamer与FFmpeg在其他情况下都需要 | |
rvdtUserData | 由应用提供视频,通过OnNewImage事件实现 | 不使用 | 不使用 |
This.RVCamera1.DeviceType := rvdtIPCamera;
# 5.1.13. FFMpegProperty 属性*
property FFMpegProperty: TRVFFMpegProperty;
用于配置FFmpeg的属性。
您可以使用IsSupportedFFMPEG函数检查FFmpeg是否存在。
主要属性是FFmpegProperty.UseFFMpeg,用于打开/关闭对FFmpeg的支持。
This.RVCamera1.FFMpegProperty.UseFFMeg := True;
# 5.1.14. FileName, ToFile 属性
property ToFile: Boolean;
property FileName: String;
2
该属性将视频录制成MJPEG格式的文件,如果ToFile = True,则从相机中录制的视频会被命名为FileName属性的视频文件。
This.RVCamera1.ToFile := True;
This.RVCamera1.Filename := 'sample.mp4';
2
# 5.1.15. FlipHorizontally, FlipVertically 属性
property FlipHorizontally: Boolean;
property FlipVertically: Boolean;
2
如果摄像机支持这些属性的设置,则该属性允许水平/垂直翻转视频。
如果摄像机支持这些属性,则在组件连接到摄像机时会从摄像机接收它们的值。
This.RVCamera1.FlipHorizontally := True;
This.RVCamera1.FlipVertically := True;
2
# 5.1.16. FocusType, FocusDistance 属性*
type
TRVCamFocus = (rvcfFocusAuto, rvcfFocusNear, rvcfFocusFar); // defined in MRVType unit
property FocusType: TRVCamFocus;
property FocusDistance: Integer;
2
3
4
如果相机支持控制对焦,则该属性可用于控制相机的对焦。
FocusType属性有如下选项:
值 | 说明 |
---|---|
rvcfFocusAuto | 自动对焦 |
rvcfFocusNear | 近距离对焦 |
rvcfFocusFar | 远距离对焦 |
FocusDistance属性仅在FocusType属性为rvcfFocusAuto时可用。FocusDistance属性有如下选项可用:
值 | 说明 |
---|---|
1 | 近距离自动对焦 |
2 | 远距离自动对焦 |
当相机支持这些属性时,这些属性的值将会从相机中读取。
This.RVCamera1.FocusType := rvcfFocusAuto;
This.RVCamera1.FocusDistance := 1;
2
# 5.1.17. GStreamerProperty 属性
property GStreamerProperty: TRVGStreamerProperty;
该属性用于配置GStreamer。
您可以使用IsSupportedGStreamer功能检查GStreamer是否存在。
主要属性是GStreamerProperty.UseGStreamer,它用于打开/关闭GStreamer的支持。
# 5.1.18. IPCameraTypes 属性(只读)
property IPCameraTypes: TRVCameraTypes;
当连接到网络摄像机(或者在搜索到摄像机)后,该属性用于返回摄像机的型号。
# 5.1.19. JpegIntegrity 属性
property JpegIntegrity: TRVJpegIntegrity;
该属性用于指定对接收图片(视频帧)的完整性检查方式。有rvjiNone(不执行检查)、rvjiFast(快速检查)、rvjiFull(完全检查)三种形式。
This.RVCamera1.JpegIntegrity := rvjiNone;
# 5.1.20. MaxCameraSearchThreadCount 属性
property MaxCameraSearchThreadCount: Word;
指定同时工作的IP摄像机搜索线程的最大计数。值越高,搜索速度越快,但消耗的系统资源越多。
This.RVCamera1.MaxCameraSearchThreadCount := 40;
# 5.1.21. Parameters 属性*
property Parameters: TRVCameraParameters;
TRVCameraParameters包含以下属性:
- ID: String;
- Version: String;
- Alias: String;
- Network: TRVCamNetworkProperties;
- DateTimeParameter: TRVDateTimeParameter;
- WirelessLan: TRVWirelessLan;
- ADSL: TRVADSL;
- UPnPtoMapPort: Boolean;
- MailService: TRVMailService;
- FtpService: TRVFtpService;
- AlarmService: TRVAlarmService;
- PTZSettings: TRVPTZSettings;
- Decoder: TRVDecoder;
TRVCameraParameters包含以下只读属性:
- CameraHost: String;
- IPCameraTypes: TRVCameraTypes;
- DeviceType: TRVDeviceType;
- UserAccess: TRVUserAccess;
- IPCameraTypesStr: String;
- UserAccessStr: String;
# 5.1.22. Quality 属性
type
TRVQualityType = (qtStandard, qtFavorMotion, qtFavorClarity); // defined in MRVType unit
property Quality: TRVQualityType;
2
3
如果摄像机支持画质设置,则该属性用于定义视频的画质偏好,该属性会在摄像机连接时从摄像机处接收。以下是Quality属性的选项:
值 | 说明 |
---|---|
qtStandard | 标准画质 |
qtFavorMotion | 针对快速运动画面进行优化 |
qtFavorClarity | 针对静止的视频帧进行画质优化 |
# 5.1.23. Rotation 属性
type
TRVRotation = (rvrNone, rvr90, rvr180, rvr270); // defined in MRVType unit
property Rotation: TRVRotation;
2
3
该熟悉可指定在发送视频流之前将视频帧旋转的角度,有rvrNone、rvr90、rvr180、rvr270等选项,此属性对于在具有“纵向”屏幕方向的设备上发送视频非常有用。
This.RVCamera1.Rotation := rvrNone;
# 5.1.24. Searching 属性
property Searching: Boolean; // read-only
当正在搜索摄像机时返回True,该属性为只读。
# 5.1.25. SmoothImage 属性
property SmoothImage: Boolean;
是否通过从最后接收的几个视频帧创建图像来平滑视频帧。
如果为True,则通过最后接收的3帧图像来平滑视频帧。
优点:可以消除图像中的噪点,尤其是在光线不足的情况下。
不足:会使移动的物体模糊化。
我们不建议对包含快速运动物体的视频或者摄像机帧速率低的执行该属性操作。
This.RVCamera1.SmoothImage := False;
# 5.1.26. SourceFileName 属性
property SourceFileName: String;
当DeviceType=rvdtFile时,该属性用于指定源视频文件的名称。
如果FFMpegProperty.UseFFMPEG = True,并且FFmpeg可用,则组件使用FFmpeg播放此文件。 否则,它使用DirectX。 系统必须安装视频编解码器。
This.RVCamera1.DeviceType := rvdtFile;
This.RVCamera1.SourceFileName := 'temp.avi';
2
# 5.1.27. URL 属性
property URL: String;
指定来自IP摄像机(或Internet中可用的其他视频源)的视频流的地址。
如果DeviceType = rvdtIPCamera且CameraHost未分配,并且DeviceType = rvdtRTSP或rvdtHTTP,则使用此属性。
避免在此属性中包含用户名,密码和端口。 请改用CameraPort / RTSPPort,UserName,UserPassword。
该属性可通过搜索摄像机功能获取。
要从相机播放视频,请调用PlayVideoStream方法。
# 5.1.28. UserAccess 属性(只读)
type // defined in MRVType unit
TRVUserAccess = (uaNone, uaPresent, uaVisitor, uaOperator, uaAdmin);
property UserAccess: TRVUserAccess; // read-only
2
3
连接到摄像机时(摄像机搜索完成后),返回用户UserName:UserPassword的访问模式。
# 5.1.29. UserName, UserPassword 属性
property UserName: String;
property UserPassword: String;
2
属性定义用于访问摄像头的用户名和密码。
# 5.1.30. Users, Maxusers 属性
property MaxUsers: Integer; // read-only
property Users: TRVCamUserCollection;
2
MaxUsers返回摄像机支持的最大用户数,用户允许管理摄像机的用户(需要管理员权限)。
TRVCamUserCollection是TRVCamUser项的集合。 每个项目都具有以下属性:
- UserName: String;
- Password: String;
- Access: TRVUserAccess;
type // defined in MRVType unit
TRVUserAccess = (uaNone, uaPresent, uaVisitor, uaOperator, uaAdmin);
2
如果连接到相机,则对此集合或其项目的任何更改都会在执行时发送到相机。 要防止发送,请使用LockCommands / UnlockCommands,然后调用UpdateUsers。
如果摄像机支持此属性(用户),则在组件连接到摄像机时会从摄像机接收其值。
# 5.1.31. VideoDeviceIndex, VideoDeviceCount, VideoDeviceList, VideoDeviceIdList 属性
property VideoDeviceIndex: Integer;
property VideoDeviceCount: Integer; // read-only
property VideoDeviceList[Index: Integer]: String; // read-only
property VideoDeviceIdList[Index : Integer]: String; // read-only
2
3
4
该属性用于控制USB摄像头以及监视器。
如果DeviceType = rvdtWebCamera或rvdtDesktop,则使用这些属性。 VideoDeviceIdList仅用于网络摄像头。
当DeviceType=rvdtWebCamera时,VideoDeviceCount返回网络摄像头(视频捕获设备)的数量。VideoDeviceList [Index](其中Index在0..VideoDeviceCount-1范围内)返回网络摄像头的名称。 可以在应用程序UI中向用户显示这些名称。VideoDeviceIdList [Index](其中Index在0..VideoDeviceCount-1范围内)返回网络摄像头的标识符。 这些标识符在计算机上是唯一的。将0..VideoDeviceCount-1范围内的值分配给VideoDeviceIndex以选择网络摄像头。要从相机播放视频,请调用PlayVideoStream方法。
当DeviceType=rvdtDesktop时,VideoDeviceCount返回监视器的计数+ 1。第0个设备对应于整个桌面,从1到VideoDeviceCount-1的索引对应于监视器(第i个设备对应于Screen.Monitors [i-1])。VideoDeviceList [Index](其中Index在0..VideoDeviceCount-1范围内)返回设备(桌面或监视器)的描述。将范围为0..VideoDeviceCount-1的值分配给VideoDeviceIndex,以选择桌面或监视器作为视频源(如果DesktopMode = rvdmFull)。要从桌面播放视频,请调用PlayVideoStream。
# 5.1.32. VideoFormat 属性
指定视频的格式。
type
TRVVideoFormat = (rvvfMJPEG, rvvfH264, rvvfAVI_H264, rvvfMP4_H264,
rvvfAVI_MPEG, rvvfMP4_MPEG); // defined in MRVType unit
property VideoFormat: TRVVideoFormat;
2
3
4
DeviceType=rvdtHTTP, rvdtRTSP, 或者 rvdtIPCamera时该属性可用。
所有视频格式(rvdtHTTP和rvdtIPCamera模式下的MJPEG除外)都需要GStreamer或FFmpeg。 如果这两者处于不可用或者关闭状态,则该属性无效。
以下是VideoFormat的选项:
值 | 说明 | GStreamer用法 | FFmpeg用法 |
---|---|---|---|
rvvfMJPEG | MJPEG格式的视频流 | DeviceType=rvdtHTTP,可选使用 DeviceType=rvdtRTSP,必须使用 | DeviceType=rvdtHTTP或者rvdtIPCamera时,可选 在其他情况下为必须 视频格式无需指定,FFmpeg自动检测 |
rvvfH264 | H.264格式的视频流 | 需要 | 同上 |
rvvfAVI_H264 | AVI文件,使用H.264编码 | 需要 | 同上 |
rvvfMP4_H264 | MP4文件,使用H.264编码 | 需要 | 同上 |
rvvfAVI_MPEG | AVI文件,使用MPEG-4 Part 2 编码 | 需要 | 同上 |
rvvfMP4_MPEG | MP4文件,使用MPEG-4 Part 2编码 | 需要 | 同上 |
# 5.1.33. VideoMode 属性*
type
TRVVideoMode = (vm50HZ, vm60HZ, vmOutdoor); // defined in MRVType unit
property VideoMode: TRVVideoMode;
2
3
如果相机支持,则设置相机模式以防止由于电力频率而对图像造成抖动影响。
以下是Video可用选项:
值 | 说明 |
---|---|
vm50HZ | 50Hz,且摄像机在室内使用 |
vm60HZ | 60Hz,且摄像机在室内使用 |
vmOutdoor | 如果摄像机在室外使用建议使用该选项 |
如果相机支持该属性,则该属性会在相机搜索时获取。
This.RVCamera1.VideoMode := vm50HZ;
# 5.1.34. VideoResolution 属性
property VideoResolution: TRVVideoResolution;
如果相机支持,则该属性用于更改视频分辨率。
如果相机支持该属性,则该属性会在搜索到相机时读取。
如果当前的DeviceType = rvdtWebCamera,则该组件将设置宽度最接近分辨率中指定的视频模式。
如果当前DeviceType = rvdtIPCamera,则组件设置摄像机视频分辨率(目前仅支持FosCam)。
如果当前的DeviceType = rvdtRTSP或rvdtHTTP,并且GStreamer用于播放视频,则该组件以指定的分辨率请求视频。
This.RVCamera1.DeviceType := rvdtIPCamera;
This.RVCamera1.VideoResolution := rvDefault;
2
# 5.2. 事件
事件 | 何时触发 |
---|---|
OnEndVideoFile | 当视频文件播放停止时触发该事件 |
OnEndVideoStream | 当视频流播放停止时触发该事件 |
OnGetImage | 当组件读取从摄像机处获取的视频帧时触发该事件 图像以Img参数返回,你不能自己释放Img,但是您可以修改此图像 需在线程上下文中调用此事件。 |
OnMoved | 当摄像机的移动命令结束后触发该事件 参数Status = 0表示命令成功,其他值表示错误 |
OnNewImage | 当获取到自定义的视频帧时触发该事件 该事件仅在DeviceType = rvdtUserData时触发 在这种情况下,程序员可以提供自己的视频帧,但是必须将它们分配给img参数 |
Onprepared | 当组件从IP摄像机读取属性时触发该事件 该事件发生在OnSearchComplete事件之前 |
OnProgress | 当接收到下一部分视频数据(来自文件或相机)时,会发生该事件 BytesRead是此新数据部分的大小,您可以使用此事件计算播放视频时从摄像机接收的字节数 |
OnSearchComplete | 当摄像机搜索结束时触发该事件 参数Status = 0表示找到摄像机,其他值表示出错 通过调用SearchCamera方法来开始搜索 |
OnSetProperty | 在完成分配摄像机属性的命令时触发该事件 参数Status = 0表示找到摄像机,其他值表示出错 |
OnStartVideoFile | 当视频文件开始播放时触发该事件 |
OnStartVideoStream | 当视频文件停止播放时触发该事件 |
OnVideoStart | 视频初始化播放时会发生此事件 当组件初始化播放视频(来自相机或文件)时,会发生此事件,它在接收第一个视频帧之前发生,因此该事件不保证该视频实际上将开始播放 |
# 5.3. 方法
方法 | 功能描述 |
---|---|
FillVideoDeviceList | 用于显示当前可用的网络摄像机或者监视器列表 |
GetCamVideoMode* | 获取摄像机的视频模式 |
GetCamVideoModeCount* | 获取当前摄像机支持的模式数量 |
GetCamVideoModeIndex* | 获取摄像机当前视频模式的索引值 |
GetCamCurrentVideoMode* | 返回当前的视频模式信息 |
SetCamVideoMode* | 设定摄像机的视频模式 |
GetDesktopVideoModeCount* | 返回监视器可用的视频模式数量 |
GetDesktopVideoModeIndex* | 返回当前视频模式的索引值 |
GetDesktopCurrentVideoMode* | 返回当前使用的视频模式 |
SetDesktopVideoMode* | 设定视频模式 |
GetDesktopVideoMode* | 返回视频模式以及其对应的索引值 |
GetAvailableCamProperties | 获取可用摄像机属性 |
GetAvailableCamMethods | 获取可用摄像机方法 |
GetAccessibleCamProperties | 获取可连接摄像机属性 |
GetAccessibleCamMethods | 获取可连接摄像机方法 |
GetSnapShot | 获取视频截图 |
IsSupportedFFMPEG | 检测是否支持FFmpeg |
IsSupportedGStreamer | 检测是否支持GStreamer |
LockCommands, UnlockCommands | 锁定命令,解锁命令 |
Move- | 摄像机的移动命令 |
PlayVideoStream, PlayVideoFile | 播放视频 |
ResetImageSetting | 将视频颜色参数重置为默认值 |
SearchCamera | 搜索相机 |
LEDOn,LEDOff | 开启/关闭摄像机的LED灯 |
WaitForVideoStream, WaitForVideoFile, WaitForVideo, WaitForSearch | 用于开启等待状态直至操作结束 |
# 5.3.1. FillVideoDeviceList 方法
procedure FillVideoDeviceList(List: TStrings);
该方法用于显示当前可用的网络摄像机或监视器列表。
如果DeviceType = rvdtWebCamera或rvdtDesktop,则可以使用该方法。
此方法使用可用的网络摄像头或监视器的名称填充List,具体取决于DeviceType属性(请参阅VideoDeviceList属性)。
This.RVCamera1.DeviceType := rvdtWebCamera;
This.RVCamera1.FillVideoDeviceList(This.ListBox1.Items);
2
# 5.3.2. GetCamVideoMode, GetCamVideoModeCount, GetCamVideoModeIndex, GetCamCurrentVideoMode, SetCamVideoMode 属性*
function GetCamVideoModeCount: Integer;
function GetCamVideoModeIndex: Integer;
function GetCamCurrentVideoMode(var CamVideoMode: TRVCamVideoMode): Boolean;
function SetCamVideoMode(const Index: Integer): Boolean;
function GetCamVideoMode(const Index: Integer; var VideoMode: TRVCamVideoMode) : Boolean;
2
3
4
5
如果DeviceType = rvdtWebCamera,则可以使用这些方法。
GetCamVideoModeCount返回当前网络摄像头的可用模式数目。 GetCamVideoMode返回有关指定模式的信息(Index参数必须在0~GetCamVideoModeCount-1范围内)。 SetCamVideoMode将Web摄像头模式更改为Index-th模式(但某些模式可能会失败)。
GetCamCurrentVideoMode返回有关当前视频模式的信息。
GetCamVideoModeIndex返回当前视频模式的索引(此方法不准确:它返回第一个视频模式的索引,其中TRVCamVideoMode与当前视频模式匹配;但是,视频模式可能包含其他参数,不包括在TRVCamVideoMode记录中;当找到索引时记录会被忽略)。
为VideoResolution分配新值可能会更改当前视频模式。 调用SetCamVideoMode后,将忽略VideoResolution,直到再为此属性指定不同的值。
# 5.3.3. GetDesktopVideoModeCount, GetDesktopVideoModeIndex, GetDesktopCurrentVideoMode, SetDesktopVideoMode, GetDesktopVideoMode 属性*
function GetDesktopVideoModeCount: Integer;
function GetDesktopVideoModeIndex: Integer;
function GetDesktopCurrentVideoMode(var DesktopVideoMode: TRVDesktopVideoMode): Boolean;
function SetDesktopVideoMode(const Index: Integer): Boolean;
function GetDesktopVideoMode(const Index: Integer; var VideoMode: TRVDesktopVideoMode): Boolean;
2
3
4
5
如果DeviceType = rvdtDesktop,则可以使用这些方法。
GetDesktopVideoModeCount返回主监视器的可用视频模式数目。 GetDesktopVideoMode返回有关指定模式的信息(Index参数必须在0..GetDesktopVideoModeCount-1范围内)。 SetDesktopVideoMode将桌面模式更改为索引模式。
GetDesktopCurrentVideoMode返回有关当前视频模式的信息。
GetDesktopVideoModeIndex返回当前视频模式的索引。
# 5.3.4. GetAvailableCamProperties, GetAvailableCamMethods, GetAccessibleCamProperties, GetAccessibleCamMethods 属性
type // defined in MRVType unit
TRVCamProperty = (rvcp_DateTimeParameter, rvcp_dtpSyncWithPC, rvcp_dtpNow, rvcp_dtpTimeZone, rvcp_dtpNTPEnabled, rvcp_dtpNTPServer,
rvcp_Network, rvcp_netDynamicIP, rvcp_netIPAddr, rvcp_netSubnetMask, rvcp_netGateway, rvcp_netDNSServer, rvcp_netHttpPort,
rvcp_WirelessLan, rvcp_wlSSID, rvcp_wlEncryption, rvcp_wlNetworkType, rvcp_wlWEP, rvcp_wlWPA, rvcp_wlShareKey,
rvcp_wlAuthetication, rvcp_wlKeyFormat, rvcp_wlDefaultTXKey, rvcp_wlKey, rvcp_wlKeyBits,
rvcp_ADSL, rvcp_adslUser, rvcp_adslPassword,
rvcp_MailService, rvcp_msSender, rvcp_msReceivers, rvcp_msSMTPServer, rvcp_msSMTPPort,
rvcp_msReportInternetIPbyMail, rvcp_msNeedAuthentication, rvcp_msSMTPUser, rvcp_msSMTPPassword,
rvcp_FtpService, rvcp_fsServer, rvcp_fsPort, rvcp_fsUser, rvcp_fsPassword,
rvcp_fsUploadFolder, rvcp_fsMode, rvcp_fsUploadImageEnabled, rvcp_fsUploadInterval,
rvcp_AlarmService, rvcp_asMotionDetectEnabled, rvcp_asMotionDetectSensitivity,
rvcp_asAlarmInputEnabled, rvcp_asAlarmTriggerLevel, rvcp_asIOLinkage, rvcp_asOutputLevel,
rvcp_asSendMail, rvcp_asUploadImageEnabled, rvcp_asUploadImageInterval, rvcp_asSchedulerEnabled,
rvcp_Decoder, rvcp_dBaudrate,
rvcp_PTZSettings, rvcp_ptzsLedMode, rvcp_ptzsCenterOnStart, rvcp_ptzsAutoPatrolInterval,
rvcp_ptzsAutoPatrolType, rvcp_ptzsPatrolHoriz, rvcp_ptzsPatrolVert, rvcp_ptzsPatrolRate,
rvcp_ptzsPatrolUpRate, rvcp_ptzsPatrolDownRate, rvcp_ptzsPatrolLeftRate, rvcp_ptzsPatrolRightRate,
rvcp_dmID, rvcp_dmVersion, rvcp_dmAlias, rvcp_dmUPnPtoMapPort,
rvcp_Users, rvcp_Switch, rvcp_FlipHorizontally, rvcp_FlipVertically, rvcp_VideoResolution,
rvcp_VideoMode, rvcp_Brightness, rvcp_Contrast, rvcp_Parameters);
TRVCamMethod = (rvul_dtpGetTimeZoneStr,rvcm_wlScan,rvcm_dmUpgradeDeviceFirmware, rvcm_dmBackup, rvcm_dmRestore,
rvcm_dmRestoreFactorySettings, rvcm_dmRebootDevice, rvcm_dmLog,
rvcm_VideoStream, rvcm_SnapShot, rvcm_Move);
function GetAvailableCamProperties: TRVCamProperties;
function GetAvailableCamMethods: TRVCamMethods;
function GetAccessibleCamProperties: TRVCamProperties;
function GetAccessibleCamMethods: TRVCamMethods;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
GetAvailableCamProperties和GetAvailableCamMethods返回摄像头支持的所有属性和方法,即使它们不支持UserName:UserPassword。
GetAccessibleCamProperties和GetAccessibleCamMethods考虑了用户权限。
只有在找到相机后才能使用这些方法。
begin
with This do
begin
RVCamera1.GetAvailableCamProperties;
RVCamera1.GetAvailableCammethods;
RVCamera1.GetAccessibleCamProperties;
RVCamera1.GetAccessibleCamMethods;
end;
end.
2
3
4
5
6
7
8
9
# 5.3.5. GetSnapShot 方法
function GetSnapShot: TRVImageWrapper;
获取摄像机当前的视频帧作为截图,需要自行释放。
This.RVCamera1.GetSnapShot;
# 5.3.6. IsSupportedFFMPEG 属性
function IsSupportedFFMPEG: Boolean;
如果系统中已安装FFmpeg且可用,该方法返回True。
if(This.RVCamera1.IsSupportedFFMPEG) then
begin
ShowMessage('支持FFMpeg');
end;
2
3
4
# 5.3.7. IsSupportedGStreamer 属性
function IsSupportedGStreamer: Boolean
如果系统中已包含GStreamer且可用,该方法返回True。
if(This.RVCamera1.IsSupportedGStreamer) then
begin
ShowMessage('支持GStreamer');
end;
2
3
4
# 5.3.8. LockCommands, UnlockCommands 属性
procedure LockCommands;
procedure UnlockCommands;
2
LockCommands阻止在属性更改后向摄像机发送命令,UnlockCommands恢复命令发送模式。 例如,您可以调用LockCommands,对用户进行更改,调用UnlockCommands,然后调用UpdateUsers。
此外,您可以在参数中应用更改时使用这些方法。
This.RVCamera1.LockCommands;
This.RVCamera1.UnlockCommands;
2
# 5.3.9. Move系列 方法
function MoveStop : Boolean;
function MoveLeft : Boolean;
function MoveLeftStop : Boolean;
function MoveRight : Boolean;
function MoveRightStop : Boolean;
function MoveUp : Boolean;
function MoveUpStop : Boolean;
function MoveDown : Boolean;
function MoveDownStop : Boolean;
function MoveLeftUp : Boolean;
function MoveLeftDown : Boolean;
function MoveRightUp : Boolean;
function MoveRightDown : Boolean;
function MoveHPatrol : Boolean;
function MoveHPatrolStop : Boolean;
function MoveVPatrol : Boolean;
function MoveVPatrolStop : Boolean;
function MoveCenter : Boolean;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
如果摄像机支持Move操作,以上方法可用于控制摄像机的移动。
等待模式:方法仅在执行命令时返回。 返回值:移动命令已成功发送到摄像机。
无等待模式:该方法初始化一个线程(用于将命令发送到摄像机)并立即返回。 返回值:False。 命令完成后,将发生OnMoved事件。
这些方法考虑了FlipHorizontally和FlipVertically属性。
# 5.3.10. PlayVideoStream, PlayVideoFile 属性
procedure PlayVideoStream;
procedure PlayVideoFile(FileName : string);
2
该方法用于播放视频。
PlayVideoStream开始播放来自摄像机或网络的视频。 视频源取决于DeviceType属性。如果来自摄像机的视频成功启动(当收到第一帧时),则发生OnStartVideoStream事件。 当视频停止时,会发生OnEndVideoStream事件。
PlayVideoFile开始播放FileName参数中指定的MJPEG文件。 如果文件中的视频成功启动(读取第一帧时),则会发生OnStartVideoFile事件。 当视频停止时,会发生OnEndVideoFile事件。 需使用FramePerSec属性。
要停止视频播放,请调用Abort方法。
您可以使用WaitForVideo,WaitForVideoStream,WaitForVideoFile执行等待操作直至播放结束(强烈建议通过事件而不是使用这些方法)。
# 5.3.11. ResetImageSetting 方法
function TRVCamera.ResetImageSetting: Boolean;
将视频颜色参数重置为默认值。该方法为Foscam专用的方法。
# 5.3.12. SearchCamera 方法--
function SearchCamera(CameraTypes: TRVCameraTypes = []) : Boolean;
该方法连接到指定的地址,识别相机型号(如果此地址有相机),读取其属性。
如果VideoFormat = rvvfMJPEG,则该方法可搜索提供MJPEG视频流的摄像机;否则它会搜索提供H.264流的摄像机(需要FFmpeg解码)。
如果您知道摄像机的型号,则可以在CameraTypes参数中指定其类型。这些方法仅搜索此参数中指定的摄像机类型(空集的工作方式类似于完整集,即组件搜索所有支持的摄像机模型)。
等待模式:该方法仅在搜索完成时返回。返回值:找到相机。
无等待模式:该方法初始化搜索线程并立即返回。返回值:False。搜索完成后,将发生OnSearchComplete事件。
然后搜索成功完成,进行以下更改:
- 已分配IPCameraTypes属性
- 如果摄像机支持,则分配VideoResolution属性
- 对于所有相机型号,除了可控制的Foscam,Axis,D-Link和Panasonic(或兼容)相机,CameraHost:CameraPort会被清除,MJPEG流的URL被分配给URL属性
- 填充参数属性
搜索后,调用PlayVideoStream接收来自此摄像机的视频。
# 5.3.13. SwitchLEDOn, SwitchLEDOff 属性
function SwitchLEDOn : Boolean;
function SwitchLEDOff : Boolean;
2
如果相机支持的话,该属性用于开启/关闭摄像机的LED指示灯。
# 5.3.14. UpdateUsers 属性
procedure UpdateUsers(SkipIndex : Integer = -1);
将用户的更改发送到摄像头(可选,用户[SkipIndex]除外)。如果LockCommands阻止向摄像机发送更改命令,则此方法很有用。
# 5.3.15. WaitForVideoStream, WaitForVideoFile, WaitForVideo, WaitForSearch 属性
procedure WaitForVideoStream;
procedure WaitForVideoFile;
procedure WaitForVideo;
procedure WaitForSearch;
2
3
4
WaitForVideoStream等待,直到来自摄像机的视频(在PlayVideoStream中启动)停止播放。
WaitForVideoFile等待,直到文件中的视频(在PlayVideoFile中启动)停止播放。
WaitForVideo会一直等到视频(来自文件或来自摄像机)停止播放。
WaitForSearch一直等到相机搜索(在SearchCamera中启动)停止。
这些方法在无等待模式下可能很有用,但是请避免使用这些方法并改为使用事件:OnEndVideoStream,OnEndVideoFile,OnSearchComplete。 调用Abort后,这些方法可能很有用。
# 6. TRVCamView 组件
TRVCamView显示来自指定视频源的视频:来自TRVCamera或来自TRVCamReceiver。
- 用法
将TRVCamera或TRVCamReceiver组件分配给TRVCamView组件的VideoSource属性,开始播放视频。
使用从多个源接收视频的TRVCamReceiver时,您可以指定要在GUIDFrom和IndexFrom属性中显示的视频。
# 6.1. 属性
属性 | 属性说明 |
---|---|
AutoSize | 规定是否使控件尺寸按照显示内容进行适配 |
CamMoveMode | 规定如何控制摄像机的运动 |
Color | 设定背景颜色 |
CurRenderMode, RenderMode | 指定视频的呈现模式以及当前呈现模式 |
FocusLineColor | 指定控件具有输入焦点时显示的矩形的颜色 |
Font | 设定控件的显示字体 |
GUIDFrom, IndexFrom | 如果VideoSource是TRVCamReceiver,则这些属性指定视频源的唯一标识符,以及其媒体通道的索引 |
HoverLineColor | 指定当控件位于鼠标指针下方时显示的矩形的颜色 |
IconStyle | 指定组件搜索IP摄像机时显示的动画 |
Language | 指定用户界面的语言 |
RememberLastFrame | 指示是否记住最后一个视频帧 |
SearchPanelColor, SearchPanelTextColor | 这些属性指定摄像机搜索面板的颜色 |
ShowCameraSearch | 指示控件在搜索摄像机时是否显示特殊搜索面板 |
ShowCaption, CaptionParts, Title, CaptionColor, CaptionFont | 属性定义窗口标题的显示方式 |
ShowFrameRect | 指示是否在控件周围绘制一个矩形 |
UseOptimalVideoResolution | 指示控件是否尝试设置最适合其大小的视频分辨率 |
VideoSource, Camera, Receiver | 指定视频源 |
ViewMode |
# 6.1.1. AutoSize 属性
property AutoSize: Boolean;
规定是否使控件尺寸按照显示内容进行适配。
This.RVCamView1.AutoSize := False;
# 6.1.2. CamMoveMode 属性
type
TRVCamMoveMode = (vcmmNone, vcmmToCursor, vcmmDrag);
property CamMoveMode: TRVCamMoveMode;
2
3
如果VideoSource是TRVCamera,则此属性有效。 如果相机支持,用户可以使用鼠标控制相机的运动(旋转)。
运动模式 | 说明 |
---|---|
vcmmNone | 组件控制摄像机的运动 |
vcmmToCursor | 通过鼠标指针点击来使摄像机旋转 |
vcmmDrag | 单击并拖动(按住鼠标按钮)将摄像机旋转到拖动方向 |
This.RVCamView1.CamMoveMode := vcmmDrag;
# 6.1.3. Color 属性
property Color: TRVMColor;
背景颜色设置。
This.RVCamView1.Color := $00E7BE9F;
# 6.1.4. CurRenderMode, RenderMode 属性
type
TRVMRenderMode = (rvmrmSoftware, rvmrmOpenGL, rvmrmDirectX, rvmrmAuto);
property RenderMode: TRVMRenderMode;
property CurRenderMode: TRVMRenderMode;
2
3
4
RenderMode指定视频呈现方法。
CurRenderMode返回当前使用的呈现方法。
值 | 说明 |
---|---|
rvmrmSoftware | 标准模式(GDI) |
rvmrmOpenGL | OpenGL |
DirectX(不稳定,不建议使用) | |
rvmrmAuto | 自动选择: 如果DirectX可用,则选择DirectX,否则 如果OpenGL可用,则选择OpenGL,否则 使用标准呈现模式 |
# 6.1.5. FocusLineColor 属性
property FocusLineColor: TRVMColor;
指定控件具有输入焦点时显示的矩形的颜色,如果ShowFrameRect = True,则绘制此矩形。
This.RVCamView1.ShowFrameRect := True;
This.RVCamView1.FocusLineColor := clRed;
2
# 6.1.6. Font 属性
property Font: TFont;
属性指定使用的字体位置:
- 搜索面板;
- 查看器本身显示“No Video”文本。
# 6.1.7. GUIDFrom, IndexFrom 属性
property GUIDFrom: String;
property IndexFrom: Integer;
2
如果VideoSource是TRVCamReceiver,则这些属性指定视频源的唯一标识符,以及其媒体通道的索引。
当此查看器显示来自TRVCamera的视频时,将忽略这些属性。
如果VideoSource是TRVCamReceiver,则查看器显示具有相同GUID值的视频流。
在TRVCamSender组件中生成视频标识符并标识此发件人(TRVCamSender.GUIDFrom属性)。 然后,您需要将此标识符添加到TRVCamReceiver组件的Senders属性中。 然后,您需要将查看器连接到此接收器,并将其GUIDFrom分配给receiver.Senders[].GUIDFrom。
如果TRVCamSender有多个媒体频道,请将所需频道的索引分配给IndexFrom; 否则,请保留IndexFrom = 0。
This.RVCamView1.GUIDFrom := '';
This.RVCamView1.IndexFrom := 0;
2
# 6.1.8. HoverLineColor 属性
property HoverLineColor: TRVMColor;
指定当控件位于鼠标指针下方时显示的矩形的颜色,当ShowFrameRect=True时该属性有效。
This.RVCamView1.HoverLineColor := $00B78E5F;
# 6.1.9. IconStyle 属性
property IconStyle: TRVMIconStyle;
指定组件搜索IP摄像机时显示的动画。如果ShowCameraSearch = True,则在调用TRVCamera.SearchCamera时显示此面板。
此属性不仅定义了动画,还定义了搜索面板的背景和文本颜色(如果它们未在SearchPanelColor和SearchPanelTextColor属性中明确定义)。
This.RVCamView1.IconStyle := TRVMIconStyle;
# 6.1.10. Language 属性
property Language: TRVMLanguage;
指定用户界面的语言。
This.RVCamView1.Language := rvmlChineseSimplified;
# 6.1.11. RememberLastFrame 属性
property RememberLastFrame: Boolean;
指示是否记住最后一个视频帧。如果为True,则控件在视频中断或停止时显示最后一帧, 否则显示空白屏幕。
This.RVCamView1.RememberLastFrame := True;
# 6.1.12. SearchPanelColor, SearchPanelTextColor 属性
property SearchPanelColor: TRVMColor;
property SearchPanelTextColor: TRVMColor;
2
这些属性指定摄像机搜索面板的颜色。
如果ShowCameraSearch = True,则在调用TRVCamera.SearchCamera时显示此面板。
默认情况下(此属性的值为clNone / Null),Viewer使用依赖于IconStyle属性的默认颜色。
SearchPanelColor会覆盖搜索面板的背景颜色。
SearchPanelTextColor会覆盖搜索面板的文本颜色。
This.RVCamView1.SearchPanelColor := clNone;
This.RVCamView1.SearchPanelTextColor := clNone;
2
# 6.1.13. ShowCameraSearch 属性
property ShowCameraSearch: Boolean;
指示控件在搜索摄像机时是否显示特殊面板。
该面板包含一些文本,动画和“中止”按钮。
“中止”按钮使用Font属性作为文本,其颜色不可自定义。
动画在IconStyle属性中定义。
面板本身的颜色根据IconStyle属性自动选择,或者可以在SearchPanelColor属性中显式指定。
文本使用Font属性,其颜色根据IconStyle属性自动选择,或者可以在SearchPanelTextColor中显式指定。
This.RVCamView1.ShowCameraSearch := True;
# 6.1.14. ShowCaption, CaptionParts, Title, CaptionColor, CaptionFont,CaptionHeight 属性
type // defined in MRVType unit
TRVCameraCaptionPart = (rvccpAddress, rvccpAlias, rvccpDate, rvccpTime);
TRVCameraCaptionParts = set of TRVCameraCaptionPart;
property ShowCaption: Boolean;
property Title: String;
property CaptionParts: TRVCameraCaptionParts;
property CaptionColor: TRVMColor;
property CaptionHeight: Integer;
property CaptionFont: TFont;
2
3
4
5
6
7
8
9
属性定义窗口标题的显示方式。
如果ShowCaption = True,则显示标题。 它的背景是用CaptionColor绘制的。 激活Pascal XE2 +样式时,系统颜色将更改为相应的样式颜色。
如果ShowFrameRect = True,CaptionColor也用于在整个窗口周围绘制一个框架。
标题的文本使用CaptionFont绘制,包含标题和CaptionParts中指定的其他信息:
值 | 说明 |
---|---|
rvccpAddress | IP相机地址 |
rvccpAlias | 相机别名 |
rvccpDate | 当前日期 |
rvccpTime | 当前时间 |
仅当VideoSource为TRVCamera时,才会显示CaptionParts中指定的信息。
CaptionHeight定义96DPI屏幕模式下的字幕高度,当屏幕DPI不同时,字幕高度相应地改变。
This.RVCamView1.ShowCaption := True;
This.RVCamView1.Title := '';
This.RVCamView1.CaptionHeight := 20;
This.RVCamView1.CaptionFont.Name := 'Tahoma';
This.RVCamView1.CaptionColor := $00A77E4F;
2
3
4
5
# 6.1.15. ShowFrameRect 属性
property ShowFrameRect: Boolean;
指示是否在控件周围绘制一个矩形
此矩形具有以下颜色:
- FocusLineColor用于聚焦窗口的颜色
- HoverLineColor用于鼠标指针下方的窗口颜色
- CaptionColor其他内容的颜色
ShowFocusRect指示当控件具有输入焦点时是否在控件周围绘制矩形。 FocusLineColor是此矩形的颜色。
This.RVCamView1.ShowFrameRect := True;
This.RVCamView1.FocusLineColor := $00E377A5;
This.RVCamView1.HoverLineColor := $00E377A5;
This.RVCamView1.CaptionColor := $00E39804;
2
3
4
#### 14.2.1.16. UseOptimalVideoResolution 属性
property UseOptimalVideoResolution;
指示控件是否尝试设置最适合其大小的视频分辨率。
如果VideoSource是TRVCamera,则此属性有效。 如果为True,则控件分配使用VideoSource.GetOptimalVideoResolution计算的VideoSource.VideoResolution,并在参数中指定其大小。
This.RVCamView1.UseOptimalVideoResolution := False;
# 6.1.16. VideoSource, Camera, Receiver 属性
property VideoSource: TRVVideoSource;
property Camera: TRVCamera; // 只读属性
property Receiver: TRVCamReceiver; // 只读属性
2
3
VideoSource指定视频源。您可以将TRVCamera或TRVCamReceiver组件分配给此属性。
如果VideoSource是TRVCamera,Camera属性会返回VideoSource的值,并将其类型化为TRVCamera。 否则,Camera返回nil。
如果VideoSource是TRVCamReceiver,则Receiver返回VideoSource的值,将其类型化为TRVCamReceiver。 否则,Receiver返回nil。
This.RVCamView1.VideoSource := This.RVCamera1;
# 6.1.17. ViewMode 属性
type // defined in MRVType unit
TRVCamViewMode = (vvmNormal, vvmCenter, vvmCut, vvmAspect, vvmStretch);
property ViewMode: TRVCamViewMode;
2
3
指定视频帧在查看器中的定位和缩放方式。
查看模式 | 示例 |
---|---|
vvmNormal 视频显示在窗口的左上角,没有拉伸 | ![]() |
vvmCenter 视频显示在窗口的中央,没有拉伸 | ![]() |
vvmCut 视频按比例拉伸,使最小边适合窗口,最大边被截断 | ![]() |
vvmAspect(默认) 视频按比例拉伸以适合窗口,保持侧面比例 | ![]() |
vvmStretch 视频被拉伸以适合窗口 | ![]() |
This.RVCamView1.ViewMode := vvmAspect;
# 6.2. 事件
事件 | 何时触发 |
---|---|
OnPaint | 在组件需要绘制视频帧时触发该事件 |
OnMouseEnter, OnMouseLeave | 当用户将鼠标指针移动到组件内部/外部时触发事件 |
OnBeginMove, OnEndMove | 当用户在此查看器中开始/结束相机移动时触发事件 |
# 7. TRVCamMultiView 组件
TRVCamMultiView显示来自多个视频源的视频。 它也可以显示音频源的活动。
- 用法 填写Viewer的集合。 此集合中的每个项目都定义控件内一个视频窗口的位置和属性。 此集合的项的属性类似于TRVCamView组件的属性。
# 7.1. 属性
属性 | 属性说明 |
---|---|
AudioSource | 指定可以显示活动的TRVMicrophone组件 |
CameraControl | 指定用于控制摄像机移动的TRVCameraControl组件 |
CamMoveMode | 规定如何控制摄像机的运动 |
CaptionColor, CaptionFont, CaptionHeight | 属性定义查看器窗口的标题的显示方式 |
Color, ViewerColor | 定义背景颜色 |
CurRenderMode, RenderMode | 指定视频的呈现模式 |
Font | 设置查看器的字体属性 |
HoverLineColor | 指定当控件位于鼠标指针下方时显示的矩形的颜色 |
IconStyle | 指定组件搜索IP摄像机时显示的动画 |
Language | 指定用户界面的语言 |
RememberLastFrame | 指示是否记住最后一个视频帧 |
SearchPanelColor, SearchPanelTextColor | 这些属性指定摄像机搜索面板的颜色 |
ShowFocusRect, FocusLineColor | ShowFocusRect指示在选择时是否在查看器周围绘制矩形,FocusLineColor是此矩形的颜色 |
ViewerIndex | 规定选定的查看器索引号 |
Viewer | 用于查看器窗口的一系列属性,可用于新建、删除查看器 |
# 7.1.1. AudioSource 属性
property AudioSource: TRVAudioSource;
指定可以显示活动的TRVMicrophone组件。
如果Viewers集合中的相应项目具有AudioViewer属性= True,则TRVCamMultiView组件内的查看器面板可以显示音频查看器。 如果此查看器面板链接到TRVCamera(而不是TRVCamReceiver),则其音频查看器会显示此AudioSource的活动。
This.RVCamMultiView1.AudioSource := This.RVMicrophone1;
# 7.1.2. CameraControl 属性
property CameraControl: TRVCamControl;
指定用于控制摄像机移动的TRVCameraControl组件(如果当前摄像机支持它)。
此组件控制所选查看器中的摄像头,请参阅ViewerIndex。
如果此属性不为空,则将其分配给链接到所选查看器的TRVCamera组件的CameraControl属性。
This.RVCamMultiView1.CameraControl := This.RVCamControl1;
# 7.1.3. CamMoveMode 属性
type
TRVCamMoveMode = (vcmmNone, vcmmToCursor, vcmmDrag);
property CamMoveMode: TRVCamMoveMode;
2
3
如果VideoSource是TRVCamera,则此属性有效。 如果相机支持,用户可以使用鼠标控制相机的运动(旋转)。
运动模式 | 说明 |
---|---|
vcmmNone | 组件控制摄像机的运动 |
vcmmToCursor | 通过鼠标指针点击来使摄像机旋转 |
vcmmDrag | 单击并拖动(按住鼠标按钮)将摄像机旋转到拖动方向 |
This.RVCamMultiView1.CamMoveMode := vcmmDrag;
# 7.1.4. CaptionColor, CaptionFont, CaptionHeight 属性
property CaptionColor: TRVMColor;
property CaptionHeight: Integer;
property CaptionFont: TFont;
2
3
属性定义查看器窗口的标题的显示方式
CaptionColor是查看器窗口标题的默认背景颜色(可以被Viewers[].CaptionColor覆盖)。
CaptionHeight定义在96DPI屏幕模式下字幕高度。 当屏幕DPI不同时,字幕高度相应地改变。
可以为每个查看器定制其他标题属性:Title,CaptionParts,ShowCaption,CaptionColor。
This.RVCamMultiView1.CaptionColor := $00A77E4F;
This.RVCamMultiView1.CaptionFont.Name := 'Tahoma';
This.RVCamMultiView1.CaptionHeight := 20;
2
3
# 7.1.5. Color, ViewerColor 属性
property Color: TRVMColor;
property ViewerColor: TRVMColor;
2
该属性定义背景颜色。Color是此组件的背景颜色。 ViewerColor是查看器窗口的默认背景颜色(可以由Viewers[].Color覆盖)。
This.RVCamMultiView1.Color := $00E7BE9F;
This.RVCamMultiView1.ViewerColor := $00E7BE9F;
2
# 7.1.6. CurRenderMode, RenderMode 属性
type
TRVMRenderMode = (rvmrmSoftware, rvmrmOpenGL, rvmrmDirectX, rvmrmAuto);
property RenderMode: TRVMRenderMode;
property CurRenderMode: TRVMRenderMode;
2
3
4
RenderMode指定视频呈现方法。
CurRenderMode返回当前使用的呈现方法。
值 | 说明 |
---|---|
rvmrmSoftware | 标准模式(GDI) |
rvmrmOpenGL | OpenGL |
DirectX(不稳定,不建议使用) | |
rvmrmAuto | 自动选择: 如果DirectX可用,则选择DirectX,否则 如果OpenGL可用,则选择OpenGL,否则 使用标准呈现模式 |
# 7.1.7. Font 属性
property Font: TFont;
属性指定使用的字体位置:
- 搜索面板;
- 查看器本身显示“No Video”文本。
# 7.1.8. HoverLineColor 属性
property HoverLineColor: TRVMColor;
指定当控件位于鼠标指针下方时显示的矩形的颜色,当ShowFrameRect=True时该属性有效。
This.RVCamMultiView1.HoverLineColor := $00B78E5F;
# 7.1.9. IconStyle 属性
property IconStyle: TRVMIconStyle;
指定组件搜索IP摄像机时显示的动画。如果ShowCameraSearch = True,则在调用TRVCamera.SearchCamera时显示此面板。
此属性不仅定义了动画,还定义了搜索面板的背景和文本颜色(如果它们未在SearchPanelColor和SearchPanelTextColor属性中明确定义)。
This.RVCamMultiView1.IconStyle := TRVMIconStyle;
# 7.1.10. Language 属性
property Language: TRVMLanguage;
指定用户界面的语言。
This.RVCamMultiView1.Language := rvmlChineseSimplified;
# 7.1.11. RememberLastFrame 属性
property RememberLastFrame: Boolean;
指示是否记住最后一个视频帧。如果为True,则控件在视频中断或停止时显示最后一帧, 否则显示空白屏幕。
This.RVCamMultiView1.RememberLastFrame := True;
# 7.1.12. SearchPanelColor, SearchPanelTextColor 属性
property SearchPanelColor: TRVMColor;
property SearchPanelTextColor: TRVMColor;
2
这些属性指定摄像机搜索面板的颜色。
如果ShowCameraSearch = True,则在调用TRVCamera.SearchCamera时显示此面板。
默认情况下(此属性的值为clNone / Null),Viewer使用依赖于IconStyle属性的默认颜色。
SearchPanelColor会覆盖搜索面板的背景颜色。
SearchPanelTextColor会覆盖搜索面板的文本颜色。
This.RVCamMultiView1.SearchPanelColor := clNone;
This.RVCamMultiView1.SearchPanelTextColor := clNone;
2
# 7.1.13. ShowFocusRect*, FocusLineColor 属性
property ShowFocusRect: Boolean;
property FocusLineColor: TRVMColor;
2
ShowFocusRect指示在选择时是否在查看器周围绘制矩形。 FocusLineColor是此矩形的颜色。
This.RVCamMultiView1.ShowFocusRect := True;
This.RVCamMultiView1.FocusLineColor := clRed;
2
# 7.1.14. ViewerIndex 属性
property ViewerIndex: Integer;
指定所选的查看器。
如果ShowFocusRect = True,则所选查看器具有FocusLineColor颜色的框架。
来自所选查看器的视频不仅可以显示在其窗口中,还可以显示在具有MainViewer = True属性的所有查看器中。
This.RVCamMultiView1.ViewerIndex := 0;
# 7.1.15. Viewer 属性
type
TRVCamViewCollection = class(TCollection);
TRVCamViewItem = class(TCollectionItem)
property Viewers: TRVCamViewCollection;
type
TRVAlignAudioViewer = (rvaavTop, rvaavBottom, rvaavLeft, rvaavRight, rvaavClient);
2
3
4
5
6
7
这是TRVCamViewItem项的集合。 每个项目定义一个查看器窗口的属性。
视频查看器的属性
此集合中的项具有与TRVCamView组件相同的属性:
- Left,Top,Width,Height
- VideoSource
- GUIDFrom,IndexFrom
- Title,CaptionParts,ShowCaption,CaptionColor
- Color
- ShowCameraSearch
- UseOptimalVideoResolution
- ViewMode
此外,如果UseFramePerSec = True(默认为False),则将FramePerSec分配给相应的TRVCamView.VideoSource.FramePerSec。
默认情况下,Color和CaptionColor属性等于clNone。这意味着会使用TRVCamMultiView的属性(ViewerColor和CaptionColor)
可以选择一些查看器作为主要查看器:分配MainViewer = True,主要查看器会显示所选查看器中的视频,请参阅ViewerIndex。通常,仅分配一个主要查看器并使其窗口比其他查看器更大是有意义的。选择查看器时,将使用主查看器的FramePerSec和UseFramePerSec而不是所选查看器的属性(如果有多个主要查看器,则使用其FramePerSec的最大值)。因此,您可以为所选窗口指定比正常窗口更大的FPS值。
音频查看器属性
除了视频查看器之外,查看器窗口还可以具有可选的音频查看器(集成的TRVMicrophoneView组件)。 它由以下属性控制:
- AudioViewer:Boolean
显示/隐藏音频查看器(默认值= False) - AlignAudioViewer:TRVAlignAudioViewer
定义音频查看器的位置(默认值= rvaavRight)
值 | 说明 |
---|---|
rvaavTop | 音频查看器显示在视频查看器上层 |
rvaavBottom | 音频查看器显示在视频查看器下层 |
rvaavLeft | 音频查看器显示在视频查看器左侧 |
rvaavRight | 音频查看器显示在视频查看器右侧 |
rvaavClient | 音频查看器占据整个区域,隐藏视频查看器 |
如果VideoSource属性指向TRVCamReceiver,则音频查看器将显示此接收器的活动:VideoSource和GUIDFrom分别分配给集成TRVMicrophoneView组件的ReceiverSource和GUIDFrom属性。
如果VideoSource属性指向TRVCamera,则音频查看器将显示链接到父TRVCamMultiView的AudioSource属性的组件的活动。
# 7.2. 事件
事件 | 何时触发 |
---|---|
OnSelectViewer | 当其中一个查看器窗口被选中(聚焦)时触发事件 |
OnViewerPaint | 当组件需要绘制视频帧时触发事件 |
# 8. TRVCamControl 组件
TRVCamControl控制相机移动(如果相机支持旋转,并且用户有足够的权限操作相机)。
该组件有5个活动区域,如按钮:向左移动,向上移动,向右移动,向下移动,移动到中心。您可以直接在TRVCamView / TRVCamMultiView组件中控制相机移动,或实现您自己的用户界面。
- 用法
- 创建TRVCamControl组件并将其分配给TRVCamera组件的CameraControl属性。
- 创建TRVCamControl组件并将其分配给TRVCamMultiView组件的CameraControl属性。 在此模式下,组件控制摄像机从所选视图的移动。
# 8.1. 属性
属性 | 属性说明 |
---|---|
Color, ParentColor, BorderColor, ArrowLineColor, ArrowColor, ArrowColorClicked, ArrowColorHot | 配置控制器的各区域颜色 |
ShowFocus | 指定组件在聚焦时是否应绘制虚线圆 |
# 8.1.1. Clor, ParentColor, BorderColor, ArrowLineColor, ArrowColor, ArrowColorClicked, ArrowColorHot 属性
property Color: TRVMColor;
property BorderColor: TRVMColor;
property ArrowLineColor: TRVMColor;
property ArrowColor: TRVMColor;
property ArrowColorClicked: TRVMColor;
property ArrowColorHot: TRVMColor;
property ParentColor: Boolean;
2
3
4
5
6
7
Color定义背景颜色(控件周围)。 如果ParentColor = True,则不绘制背景,因此控件是透明的。
BorderColor是边界圆的颜色。
ArrowLineColor是箭头边框的颜色。
ArrowColor,ArrowColorClicked,ArrowColorHot是箭头的颜色:正常,单击,分别位于鼠标指针下方。
# 8.1.2. ShowFocus 属性
property ShowFocus: Boolean;
指定组件在聚焦时是否应绘制虚线圆。
This.RVCamControl1.ShowFocus := True;
# 9. TRVCamSender 组件
TRVCamSenser将视频和音频发送到网络。
描述 如果Active = True,则组件从VideoSource获取视频,从AudioSource获取音频,并将它们发送到网络。 TRVCamReceiver和TRVMediaServer可以接收这些视频和音频流。 除音频和视频外,发件人还可以发送命令和文件。视频格式在Encoding属性中指定。
媒体通道 可以在多个媒体通道中组织数据。
当您通过TRVMediaServer发送信息时,媒体通道非常有用; 例如,它们允许客户端从多个摄像头发送视频。 对于直接连接(对TRVCamReceiver),您可以使用多个TRVCamSender组件。
默认(第0个)通道的音频和视频在属性VideoSource和AudioSource中定义。
第一,第二通道等的音频和视频在ExtraMediaSource集合属性中的项目的VideoSource和AudioSource属性中定义。
命令,文件和用户数据也可以链接到通道。 相应的方法具有MediaIndex参数,您可以在其中指定媒体通道的索引。连接到TRVCamReceiver 建议对视频和音频使用UDP连接,尤其是视频。 对于其他类型的数据,强烈建议不要这样做。如果使用代理服务器,则需要HTTP连接。
将TRVCamSender.Active与TRVCamReceiver.Active设置为True。- 发送者到接收者使用UDP连接
TRVCamSender.Protocol设置为rvpUDP,并且指定TRVCamSender的ReceiverHost:ReceiverPort。
TRVCamReceiver.Protocol设置为rvpUDP,并且其Port属性需要与TRVCamSender的ReceiverPort一致。 - 发送者到接收者使用TCP连接
TRVCamSender.Protocol设置为rvpTCP(或者rvpHTTP),并且指定TRVCamSender的ReceiverHost:ReceiverPort(如果使用了rvpHTTP,还需要填写TRVCamSender的 ProxyHost:ProxyPort),将TRVCamSender的TCPConnectionType指定为rvtcpSenderToReceiver。
TRVCamReceiver.Protocol也同样设置为rvpTCP(或者rvpHTTP),Port需与TRVCamSender.ReceiverPort一致。将TRVCamReceiver的TCPConnectionType指定为rvtcpSenderToReceiver。 - 接收者到发送者使用TCP(或者HTTP)连接
TRVCamSender.Protocol设置为rvpTCP(或者rvpHTTP),指定SenderPort,并且将TRVCamSender的TCPConnectionType指定为rvtcpReceiverToSender。 TRVCamReceiver.Protocol设置为rvpTCP(或者rvpHTTP),Senders必须包含SenderHost:SenderPort指向此发件者的项(该项的SenderPort必须等于此发件者的SenderPort),将TRVCamReceiver的TCPConnectionType指定为rvtcpReceiverToSender。
- 发送者到接收者使用UDP连接
连接到TRVCamReceiver-2.使用唯一标识符 唯一标识符可用于标识发送者和接收者。
- 接收者识别
接收器可以(可选地)检查数据是否真正地发送给它。 它有助于在网络攻击期间忽略未经授权的发件人。
要启用此功能,请为TRVCamReceiver.GUIDMy分配有效值。 如果已分配,则接收方仅接受来自GUIDTo属性中包含相同值的发送方的数据。 - 发送者识别
在最简单的情况下,当单个发送者连接到单个接收者时,不需要发送者标识。
但是,接收者可以接收来自多个发送者的视频; GUIDFrom属性允许区分发件人。 接收方可以接受来自指定发件人的数据(在TRVCamReceiver.Senders中列出),也可以接受来自所有发件人的数据(在这种情况下,TRVCamReceiver.Senders必须为空)。
- 接收者识别
接收器可以(可选地)检查数据是否真正地发送给它。 它有助于在网络攻击期间忽略未经授权的发件人。
# 9.1. 属性
属性 | 属性说明 |
---|---|
Active | 启用/禁用视频/音频的发送 |
AudioSource | 定义默认(第0)媒体通道的音频源 |
BufferSize | 定义用于发送数据的缓冲区大小 |
ChangedAreaProcessingMode | 指定在检测更改区域之前如何预处理视频帧 |
CompressionOptions | 定义视频,音频,命令,文件和用户数据的压缩选项 |
CompressionQuality | 指定图像的压缩质量 |
ConnectionProperties | 定义连接的属性 |
Encoding | 指定视频的编码行为 |
ExtraMediaSources | 定义将由TRVCamSender组件发送的其他音频和视频源 |
FilterBlur | 允许在发送之前将模糊滤镜应用于视频帧 |
FrameDifferenceInterval | 启用发送帧间差异的模式 |
FullFrameInterval | 定义发送完整视频帧的间隔 |
GUIDFrom, UseGUID | 属性允许为此发送者指定唯一标识符 |
GUIDTo, GUIDGroup | 属性指定接收者和一组接收者的标识符 |
MinChangeAreaSize, PixelColorThreshold -R -G -B | 如果Encoding = rvet*Change,则属性指定前一帧和当前视频帧的比较方式 |
Protocol | 定义用于发送数据的协议 |
ProxyHost, ProxyPort | 这些属性定义代理服务器的地址和端口(如果存在代理服务器) |
ReceiverHost, ReceiverPort | 属性定义接收器的地址和端口(TRVCamReceiver或TRVMediaServer) |
SenderPort | 当接收方启动与发送方的连接时,在模式中定义发送方的端口 |
SendMediaTypes | 定义组件发送的媒体类型(视频,音频等) |
SendOptions | 指定用于发送不同类型数据的选项 |
SessionKey | 返回当前会话的标识符 |
ShowCmd | 指定是否调用OnSendCmd和OnSentCmd事件 |
SourceAudioIndex | 定义分配给VideoSource的TRVCamReceiver的媒体通道索引,该索引将用于默认(第0个)媒体通道中的音频 |
SourceVideoIndex | 定义分配给VideoSource的TRVCamReceiver的媒体通道索引,该索引将用于默认(第0)媒体通道中的视频 |
TCPConnectionType | 指定哪一方启动TCP / HTTP连接 |
TestMode | 允许发送测试数据 |
VideoResolution | 这些属性允许降低视频分辨率 |
VideoSendType | 指定视频的发送方式 |
VideoSource, SourceGUID | 定义视频(音频)源 |
# 9.1.1. Active 属性
property Active: Boolean;
启用/禁用视频/音频的发送。
This.RVCamSender1.Active := True;
# 9.1.2. AudioSource 属性
property AudioSource: TRVAudioSource;
定义默认(第0)媒体通道的音频源。您可以将TRVMicrophone组件分配给此属性。 如果TRVCamReceiver用作视频源,它也可以用作音频源。
媒体通道 TRVCamSender可以在多个频道中发送视频和音频。 默认(第0)通道由AudioSource和VideoSource属性定义。 其他通道在ExtraMediaSources属性中定义。
完整指定音源的必要性 在最简单的情况下,只需分配给此属性的TRVMicrophone组件读取声音。 无需其他属性设置。
但是当从TRVCamReceiver读取声音时,您需要指定其他属性,因为此接收者可以从多个发送者接收数据,并且每个发送者可以发送多个媒体通道。 在这种情况下,除了将TRVCamReceiver分配给VideoSource之外,还需要指定:- SourceGUID:指定发送者的标识符。
- SourceAudioIndex:指定SourceGUID中指定的发送方的媒体通道。
请参阅有关SourceAudioIndex属性中的方案。
This.RVCamSender1.AudioSource := This.RVMicrophone1;
# 9.1.3. BufferSize 属性
property BufferSize: Cardinal;
定义用于发送数据的缓冲区大小。
当流量较高时,较大的缓冲区大小可提供更快的发送速度。 但是,当流量较低时,较大的缓冲区可能会降低发送速度,因为在缓冲区完全填满时会发送数据。
对于UDP连接,请勿将BufferSize设置为大于16384。
This.RVCamSender1.BufferSize := 8192;
# 9.1.4. ChangedAreaProcessingMode 属性
property ChangedAreaProcessingMode: TRVChangedAreaProcessingMode;
指定在检测更改区域之前如何预处理视频帧。
如果Encoding = rvet*Change,则组件会比较前一个和当前视频帧以查找更改的区域。 有关此过程的其他信息,请参阅有关MinChangeAreaSize和PixelColorThreshold属性。
该属性有以下选项:
值 | 说明 |
---|---|
rvcapmOriginalSize | 在原始视频帧中搜索更改的区域 |
rvcapmAuto | 视频帧在处理之前缩小,帧的最大边减半,直到不大于320像素,最小的一面相应减少 |
在大帧中搜索变化的区域可能是耗时的过程。 使用缩小的图像可以快速处理。
This.RVCamSender1.ChangedAreaProcessingMode := rvcapmAuto;
# 9.1.5. CompressionOptions 属性
property CompressionOptions: TRVCompressionOptions;
定义视频,音频,命令,文件和用户数据的压缩选项。对于不同类型的数据,您可以选择以下选项:
- rvcNone:不压缩。
- rvcParts:部分压缩。
- rvcFull:完全(整体)压缩。
This.RVCamSender1.CompressionOptions.Audio := rvtcNone;
# 9.1.6. CompressionQuality 属性
property CompressionQuality: Integer;
指定图像的压缩质量。可取的值的范围在0~100之间。
JPEG和HWL 使用CompressionQuality设置Jpeg和HWL图像的压缩质量。 属性值越高(最多为100),图像质量越好,但尺寸越大。 属性值越低(至少为1),得到的大小越小,但代价是图像质量降低。
PNG 对于Png图像,此选项不会影响图像质量,但会影响压缩质量。 属性值越高,图片越小,但编码它需要更多的CPU资源。
值 | 较小数值的CompressionQuality | 较大数值的CompressionQuality |
---|---|---|
Jpeg,HWL | 数据量小,图像质量低,CPU使用率低 | 数据量大,图像质量高,CPU使用率高 |
Png | 数据量大,CPU使用率低 | 数据量小,CPU使用率高 |
This.RVCamSender1.CompressionQuality := 90;
# 9.1.7. ConnectionProperties 属性
property ConnectionProperties: TRVConnectionProperties;
定义连接的属性。
- VideoTimeout:Integer(默认值= DefaultWaitForVideo)
- AudioTimeout:Integer(默认值= DefaultWaitForAudio)
- CmdTimeout:Integer(默认值= DefaultWaitForCmd)
- DataTimeout:Integer(默认值= DefaultWaitForData)
- FileTimeout:Integer(默认值= DefaultWaitForFile)
Timeout属性为非阻塞套接字定义指定类型数据的最大等待时间(以毫秒为单位)。 对于命令的等待时间是最大的,因为它们是最重要的(对于稳定工作可能甚至是至关重要的)。
- UseBlockingSocketsForVideo:Boolean(默认值= False)
- UseBlockingSocketsForAudio:Boolean(默认值= False)
- UseBlockingSocketsForCmd:Boolean(默认值= True)
- UseBlockingSocketsForData:Boolean(默认值= False)
- UseBlockingSocketsForFile:Boolean(默认值= True)
如果UseBlockingSockets * = True,组件发出请求并等待其他方响应(或断开连接),超时时不会断开连接。
优点:将收到所有发送的数据。
缺点:稳定性; 如果一个应用程序挂起,其他应用程序也会挂起。
如果UseBlockingSockets * = False,组件发出请求并等待其他方响应,若出现超时则会断开连接。
优点:稳定; 如果一个应用程序挂起,或者它太忙而无法处理请求,则其他应用程序会在超时后中断连接,因此它可以继续工作。
缺点:如果其他应用程序繁忙,数据可能会丢失,连接将被破坏。
# 9.1.8. Encoding 属性
property Encoding: TRVEncodingType;
指定视频的编码行为。在rvet * Change模式中,组件仅发送视频帧的更改区域。有以下选项:
值 | 说明 |
---|---|
rvetJPEG | 视频帧作为Jpeg图像发送 |
rvetJPEGChange | 视频帧被分成片段,更改的片段作为Jpeg图像发送 |
rvetHWL (BETA) | 使用Haar Wavelet Transfrom压缩视频帧 |
rvetHWLChange (BETA!) | 视频帧被分成片段,更改的片段使用Haar Wavelet Transfrom压缩 |
rvetBMP | 视频帧作为位图图像发送 |
rvetBMPChange | 视频帧被分成片段,更改的片段作为位图图像发送 |
rvetPNG | 视频帧作为Png图像发送 |
rvetPNGChange | 视频帧被分成片段,更改的片段作为位图PNG图像发送 |
rvetMixFormat | 视频帧作为图像发送,该组件选择为该帧提供最小尺寸的图像格式,模式需要更多的计算资源 |
rvetMixFormatChange | 视频帧被分成片段,更改的片段作为图像发送,该组件选择为该帧提供最小尺寸的图像格式,此模式需要过多的计算资源 |
PNG编码对于从具有DeviceType = rvdtDesktop的TRVCamera发送无损图像可能是有用的。
This.RVCamSender1.Encoding := rvetJPEG;
# 9.1.9. ExtraMediaSources 属性
property ExtraMediaSources: TRVMediaSourceCollection;
定义将由TRVCamSender组件发送的其他音频和视频源。
TRVCamSender组件可以发送在多个媒体信道中组织的数据。
默认(第0个)通道的音频和视频在其属性VideoSource,AudioSource(和SourceGUID,SourceVideoIndex,SourceAudioIndex)中定义。
第1,第2频道等的音频和视频在ExtraMediaSource集合属性中的项目属性中定义:
- ExtraMediaSource[0]定义第一个频道
- ExtraMediaSource[1]定义第二个频道 ……
# 9.1.10. FilterBlur 属性
property FilterBlur: Boolean;
允许在发送之前将模糊滤镜应用于视频帧。
This.RVCamSender1.FilterBlur := False;
# 9.1.11. FrameDifferenceInterval 属性
property FrameDifferenceInterval: Word
启用发送帧间差异的模式 。此模式仅在编码为rvet * Change时有效。
为此属性分配正值将打开仅发送帧之间差异的模式。
该值指定链中的多个视频帧。 例如,如果FrameDifferenceInterval = 5,则链由5个帧组成:第一帧按原样发送,随后的4帧作为新帧和旧帧之间的差异发送。
此设置可减少流量,但:
它需要在发送方进行更多计算;
如果至少有一帧丢失或损坏(可能在UDP模式下),绘制后续帧会导致出现伪影(另请参阅TRVCamReceiver.IgnoreCorruptedFrames)
帧计数器不仅在到达FrameDifferenceInterval时重置,而且在到达FullFrameInterval时也会重置,因此使用FrameDifferenceInterval> FullFrameInterval是没有意义的。
This.RVCamSender1.FrameDifferenceInterval := 0;
# 9.1.12. FullFrameInterval 属性
property FullFrameInterval: Integer;
定义发送完整视频帧的间隔。
如果Encoding = rvet*发生更改,则仅发送部分视频帧。 如果由于某些原因丢失了包含完整图像的初始帧,则末端侧将显示部分图像。 要解决此问题,发送方会在每个FullFrameInterval时间发送一个完整的帧。
This.RVCamSender1.FullFrameInterval := 25;
# 9.1.13. GUIDFrom, UseGUID 属性
property UseGUID: Boolean
property GUIDFrom: String;
2
属性允许为此发送者指定唯一标识符。
如果UseGUID = True,则会向GUIDFrom发送数据,允许接收者区分来自不同发件人的视频。
如果要与TRVMediaServer组件通信,则UseGUID必须为True(否则服务器会拒绝此发件人的数据)。
如果UseGUID = False,则只能将数据发送到TRVCamReceiver组件,以接受来自任何GUID的数据。
如果UseGUID = True,则GUIDFrom不能为全零(即“{00000000-0000-0000-0000-000000000000}”)。
//UseGUID为True的情况下,GUIDFrom自动生成
This.RVCamSender1.UseGUID := True;
2
# 9.1.14. GUIDTo, GUIDGroup 属性
property GUIDTo: String;
property GUIDGroup: String;
2
属性指定接收者和一组接收者的标识符。
如果UseGUID = False,则忽略GUIDTo和GUIDGroup。
连接到TRVCamReceiver 如果接收者的GUIDMy为空,则它接受来自具有任何GUIDTo值(可以为空值)的发送者的数据。如果分配了接收者的GUIDMy,则它仅接受具有相同GUIDTo值的发送者的数据。
连接到TRVMediaServer 如果GUIDTo不为空,则它标识要将数据发送到的客户端:服务器仅将此发送方的数据发送到指定的客户端;如果GUIDGroup不为空,则服务器将数据从此发件人发送到属于GUIDGroup标识的组的客户端;否则,发送方将数据发送到默认接收方。 如果此列表为空,则数据无处可去。
# 9.1.15. MinChangeAreaSize, PixelColorThreshold -R -G -B 属性
如果Encoding = rvet*Change,则属性指定前一帧和当前视频帧的比较方式。
property MinChangeAreaSize: Integer;
property PixelColorThreshold: Integer;
property PixelColorThresholdR: Integer;
property PixelColorThresholdG: Integer;
property PixelColorThresholdB: Integer;
2
3
4
5
如果Encoding = rvet*Change,则组件会比较前一个和当前视频帧以查找更改的区域。
设第一像素为
该组件以最佳方式计算覆盖已更改像素的矩形。 包含少于MinChangeAreaSize更改像素的矩形将被忽略。
然后发送者只发送覆盖更改区域的矩形。 这些属性的最佳设置可减少网络流量并允许滤除噪声。
- 示例
例如,发件人从相机接收图像,然后计算已更改(高于阈值)像素。 在下图中,未更改的像素用黑色绘制,更改的像素以灰色显示。 如果MinChangeAreaSize = 6,则忽略包含少于6个像素的所有区域。包含6个或更多像素的两个区域用红色矩形框起。
This.RVCamSender1.MinChangeAreaSize := 10;
This.RVCamSender1.PixelColorThreshold := 8;
This.RVCamSender1.PixelColorThresholdR := 8;
This.RVCamSender1.PixelColorThresholdG := 8;
This.RVCamSender1.PixelColorThresholdB := 8;
2
3
4
5
# 9.1.16. Protocol 属性
property Protocol: TRVProtocol;
定义用于发送数据的协议。有三种选项可选:rvpUDP、rvpTCP、rvpHTTP。
UDP使用简单的传输模型,协议机制最少。 UDP速度快但不可靠:无法保证交付、无顺序检查、无重复检验。 建议用于发送视频和音频,尤其是视频。 强烈建议不要使用UDP发送其他类型的数据(二进制数据,文件,命令)。
TCP和HTTP提供可靠的有序交付。 使用代理服务器进行连接时,或者服务器具有符号名称(URL)时,必须使用HTTP。 否则,您可以使用TCP。
TRVCamSender与TRVCamReceiver连接的建议 如果您不仅需要发送视频和音频,还需要发送其他类型的数据(命令,文件等),请创建2对Sender + Receiver。 对于第一个Sender,分配Protocol = rvpUDP,将其连接到第一个Receiver(具有相同的Protocol属性值)并用于传输视频和音频数据。 对于第二个Sender,分配Protocol = rvpTCP(或rvpHTTP),将其连接到第二个Receiver(具有相同的Protocol属性值)并用于传输命令,文件等。
TRVCamSender与TRVMediaServer连接的建议 如果您不仅需要发送视频和音频,还需要发送其他类型的数据(命令,文件等),则客户端可能包含3个具有相同GUID的组件:两个Sender和一个Receiver。 第一个Sender可以使用UDP发送视频和音频。 第二个Sender可以使用HTTP或TCP发送命令和文件。 连接Server-Receiver必须始终为HTTP或TCP。
This.RVCamSender1.Protocol := rvpTCP;
# 9.1.17. ProxyHost, ProxyPort 属性
property ProxyHost: String;
property ProxyPort: Word;
2
这些属性定义代理服务器的地址和端口(如果存在代理服务器),仅当Protocol = rvpHTTP时才使用这些属性。
This.RVCamSender1.ProxyHost := '192.168.1.101';
This.RVCamSender1.ProxyPort := 9908;
2
# 9.1.18. ReceiverHost, ReceiverPort 属性
property ReceiverHost: String;
property ReceiverPort: Word;
2
属性定义接收器的地址和端口(TRVCamReceiver或TRVMediaServer)。
连接到TRVCamReceiver时,ReceiverPort的值必须等于其Port属性。
连接到TRVMediaServer时,ReceiverPort的值必须等于其HTTPPort或UDPPort,具体取决于协议。
如果Protocol = rvpUDP,或者TCPConnectionType = rvtcpSenderToReceiver时也需要使用该属性。
This.RVCamSender1.ReceiverHost := '192.168.1.102';
This.RVCamSender1.ReceiverPort := 9909;
2
# 9.1.19. SenderPort 属性
property SenderPort: Word;
当接收方启动与发送方的连接时,在模式中定义发送方的端口。
如果Protocol = rvpTCP(或rvpHTTP)和TCPConnectionType = rvtcpReceiverToSender,则使用此属性。
This.RVCamSender1.SenderPort := 9910;
# 9.1.20. SendMediaTypes 属性
property SendMediaTypes: TRVMediaTypes;
定义组件发送的媒体类型(视频,音频等)。可发送的媒体类型包括视频(rvmtVideo)、音频(rvmtAudio)、文件(rvmtFileData)、任意二进制数据(rvmtUserData)、命令(rvmtCmdData)。
# 9.1.21. SendOptions 属性
property SendOptions: TRVSendOptions;
指定用于发送不同类型数据的选项。包括视频(Video)、音频(Audio)、文件(FileDta)、任意二进制数据(UserData)、命令(Cmd)。这些类型的数据有以下选项可选:
值 | 说明 |
---|---|
rvmvstOnlyCurrentData | 数据可用时会创建新连接,并在数据发送后关闭 |
rvmvstStream | 连续发送,保持连接 |
# 9.1.22. SessionKey 属性(只读)
property SessionKey: TRVSessionKey;
返回当前会话的标识符。
每当Active变为True时,此属性的值将更改(递增1)。 当Active = False时,此属性返回0。
此属性的值作为参数传递给TRVCamSender的事件。 如果在事件内执行耗时的操作,则比较此属性和SessionKey参数的值是有意义的,以确保未关闭或重新打开连接。
此属性的值不会传输到已连接的TRVCamReceiver或TRVMediaServer,因此它是本地属性。 它不必等于连接的TRVCamReceiver的SessionKey(这些属性彼此独立)。
# 9.1.23. ShowCmd 属性
property ShowCmd: Boolean;
指定是否调用OnSendCmd和OnSentCmd事件。
This.RVCamSender1.ShowCmd := True;
# 9.1.24. SourceAudioIndex 属性
property SourceAudioIndex: Integer;
定义分配给VideoSource的TRVCamReceiver的媒体通道索引,该索引将用于默认(第0个)媒体通道中的音频。
在最简单的情况下,从分配给AudioSource属性的TRVMicrophone组件读取声音。 不需要其他属性设置(SourceGUID必须为空,SourceAudioIndex必须为0)。
但更复杂的情况是可能的:此发送器用于重新转换从网络接收的声音。 在这种情况下,声音取自分配给VideoSource属性的TRVCamReceiver组件。
该接收器可以从多个发送器接收数据,并且每个发送器可以发送多个媒体信道。 在这种情况下,您需要指定:
SourceGUID:指定向该接收器发送音频的发送者。
SourceAudioIndex:指定SourceGUID中指定的发送方的媒体通道。
示例 现在有一个TRVCamReceiver,它通过网络(直接连接或通过TRVMediaServer)从两个发送者接收数据:TRVCamSender1和TRVCamSender2。每个源发送者都有两个媒体频道(第0和第1),我们想重新翻译TRVCamSender1第一频道的音频,我们的TRVCamSender组件及其属性为橙色。在上述情况下,我们要将SourceGUID属性指定为TRVCamSender的GUIDFrom值,SourceAudioIndex = 1,TRVCamReceiver组件分配给VideoSource属性。
多轨道媒体 AudioSource / VideoSource,SourceGUID,SourceAudioIndex属性定义TRVCamSender组件的默认(第0)媒体通道的声源。
类似地,VideoSource,SourceGUID,SourceVideoIndex属性定义默认媒体通道的视频源。
可以在ExtraMediaSources集合属性的项目的属性中定义更多媒体渠道(从1开始索引)。
This.RVCamSender1.SourceAudioIndex := 0;
# 9.1.25. SourceVideoIndex 属性
property SourceVideoIndex: Integer;
定义分配给VideoSource的TRVCamReceiver的媒体通道索引,该索引将用于默认(第0)媒体通道中的视频。
在最简单的情况下,从分配给VideoSource属性的TRVCamera组件读取视频。 不需要其他属性设置(SourceGUID必须为空,SourceVideoIndex必须为0)。
但更复杂的情况是可能的:此发件人用于重新翻译从网络接收的视频。 在这种情况下,声音取自分配给VideoSource属性的TRVCamReceiver组件。
该接收器可以从多个发送器接收数据,并且每个发送器可以发送多个媒体信道。 在这种情况下,您需要指定:
SourceGUID指定向该接收者发送视频的发送者。
SourceVideoIndex指定SourceGUID中指定的发送方的媒体通道。
示例 现在有一个TRVCamReceiver,它通过网络(直接连接或通过TRVMediaServer)从两个发送者接收数据:TRVCamSender1和TRVCamSender2,每个源发送者都有两个媒体频道(第0和第1),我们想重新翻译TRVCamSender第一频道的视频,我们的TRVCamSender组件及其属性为橙色。在上述情况下,我们将SourceGUID属性指定为等于TRVCamSender1的GUIDFrom值,并且SourceVideoIndex = 1,TRVCamReceiver组件分配给VideoSource属性。
多轨道媒体 VideoSource,SourceGUID,SourceVideoIndex属性为此TRVCamSender组件的默认(第0个)媒体通道定义视频源。类似地,AudioSource / VideoSource,SourceGUID,SourceAudioIndex属性定义默认媒体通道的音频源。可以在ExtraMediaSources集合属性的项目的属性中定义更多媒体渠道(从1开始索引)。
This.RVCamSender1.SourceVideoIndex := 0;
# 9.1.26. TCPConnectionType 属性
property TCPConnectionType: TRVTCPConnectionType;
指定哪一方启动TCP / HTTP连接。
如果Protocol = rvpTCP或rvpHTTP,则使用此属性。
与TRVCamReceiver连接时,此值必须等于接收方的TCPConnectionType。
该属性有以下选项可选:
值 | 说明 |
---|---|
rvtcpSenderToReceiver | 发送方启动与接收方的连接 |
rvtcpReceiverToSender | 接收方启动与发送方的连接 |
This.RVCamSender1.TCPConnectionType := rvtcpSenderToReceiver;
# 9.1.27. TestMode 属性
property TestMode: TRVBoundsTestMode;
允许发送测试数据。
如果Encoding = rvet*Change,则可以使用rvstmChangedFragments。 在此模式下,组件不会发送更改的片段,而是发送特殊的测试图像,其中显示更改的像素,更改的区域(匹配MinChangeAreaSize属性)用矩形框起。 此模式可用于查找给定视频源的MinChangeAreaSize和PixelColorThreshold属性的最佳值。
该属性有以下选项:
值 | 说明 |
---|---|
rvstmNone | 测试模式已关闭 |
rvstmChangedFragments | 创建显示更改区域的图像 |
This.RVCamSender1.TestMode := rvstmChangedFragments;
# 9.1.28. VideoResolution 属性
property VideoResolution: TRVVideoResolution;
这些属性允许降低视频分辨率。
如果VideoResolution <> rvDefault,并且VideoResolution小于VideoSource的视频分辨率,则发送者使用VideoResolution中规定的值发送视频。
该属性有如下选项:
值 | 说明 |
---|---|
rvDefault | 使用默认视频分辨率,不进行缩放 |
rv160_120 | 视频分辨率为160 x 120 |
rv320_240 | 视频分辨率为320 x 240 |
rv640_480 | 视频分辨率为640 x 480 |
rv1024_768 | 视频分辨率为1024 x 768 |
rv1280_720 | 视频分辨率为1280 x 720 |
rv1900_1280 | 视频分辨率为1900 x 1280 |
This.RVCamSender1.VideoResolution := rvDefault;
# 9.1.29. VideoSendType 属性*
type
TRVMVideoSendType = (rvmvstImageStream, rvmvstVideoStream);
property VideoSendType : TRVMVideoSendType;
2
3
指定视频的发送方式。发送者连接到接收者时使用此属性。 否则,始终建立永久连接。
值 | 说明 |
---|---|
rvmvstImageStream | 帧是单独发送的,建立连接以发送每个帧,可以并行发送多个帧 |
rvmvstVideoStream | 帧在单个连接中发送,仅在视频播放完毕后才会关闭此连接,推荐用于慢速处理器 |
# 9.1.30. VideoSource, SourceGUID 属性
property VideoSource: TRVVideoSource;
property SourceGUID: String
2
定义视频(音频)源。视频源可以是TRVCamera或TRVCamReceiver组件。如果将TRVCamReceiver分配给此属性,它也可以用作音频源。如果将TRVCamReceiver分配给此属性,并且此接收器从多个源接收视频,则可以指定要在SourceGUID属性中显示的视频(和音频)。
媒体通道 TRVCamSender可以在多个频道中发送视频和音频。 默认(第0个)通道由AudioSource和VideoSource属性定义。 其他通道在ExtraMediaSources属性中定义。
需要完整定义视频源属性的必要性 在最简单的情况下,从分配给此属性的TRVCamera组件读取视频。 无需其他属性设置。
但是当从TRVCamReceiver读取视频时,您需要指定其他属性,因为此接收器可以从多个发送方接收数据,并且每个发送方可以发送多个媒体通道。 在这种情况下,除了将TRVCamReceiver分配给VideoSource之外,还需要指定:- SourceGUID:指定发件人。
- SourceVideoIndex:指定SourceGUID中指定的发送方的媒体通道,请参阅有关SourceVideoIndex中的方案。
# 9.2. 事件
事件 | 何时触发 |
---|---|
OnConnecting | 当发送者开始与服务器/接收者的连接时,或者当接收者开始与发送者的连接时触发该事件 |
OnConnected | 当连接成功时触发该事件 |
OnConnectError | 当连接失败时(仅指在发起连接后由于出错导致连接失败)触发该事件 |
OnDisconnect | 当断开连接时触发该事件 |
OnEnCodeAudio | 当编码音频时触发该事件 |
OnSendCmd, OnSentCmd | 当命令发送后触发该事件 |
# 9.2.1. OnConnected, OnConnecting, OnDisconnect, OnConnectError 事件
连接/断开连接到TRVMediaServer或TRVCamReceiver时会发生上述事件。
当发送者开始与服务器/接收器的连接时,或者当接收者开始与发送者的连接时,发生OnConnecting事件。
OnConnecting事件发生后,会发生OnConnected事件或OnConnectError事件。
OnConnected在成功连接时发生。 OnConnectError在连接失败时发生。
断开连接时发生OnDisconnect事件。
如果发送者启动连接,则MediaTypes参数需要包含将要发送的数据类型。 发送者创建新连接以发送特定数据,因此参数始终包含单个数据类型。
如果接收方启动连接,则MediaTypes为空。
如果在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值是有意义的,以确保连接未关闭或重新打开。
# 9.2.2. OnEncodeAudio 事件
当发件人将要从AudioSource发送音频数据时发生。
AStream包含原始音频数据。 这些数据的参数在ASamplesPerSec和ABitsPerSample中指定。
您可以将音频编码为另一种格式,然后将其写回到AStream。 您还可以修改将发送到网络的ASamplesPerSec和ABitsPerSample的值。
# 9.2.3. OnSendCmd, OnSentCmd 事件
发送命令时发生。
仅在ShowCmd = True时才调用这些事件。
命令由SendCmd方法发送(以及内部调用SendCmd以发送特殊命令的其他方法)。
启动命令发送时(即调用SendCmd时)发生OnSendCmd。 此事件可用于调试目的。
发送命令后发生OnSentCmd。
可以在线程上下文中调用这些事件,因此在此事件中请勿更新用户界面(或进行需要主进程上下文的任何其他操作)。
# 9.3. 方法
方法 | 功能描述 |
---|---|
AddAllowedSender, RemoveAllowedSender, AddAllowedSenders, ClearAllowedSenders, HelloToAllowedSenders, GoodbyeToAllowedSenders | 允许筛选出服务器上发件人的方法 |
AddDefaultReceiver, RemoveDefaultReceiver, HelloToDefaultReceivers, GoodbyeToDefaultReceivers | 与服务器上的默认接收者列表一起使用的方法 |
AllowMediaAccess, CancelMediaAccess | 该方法简化了默认接收者的管理 |
GetAllUsers, GetAllOnlineUsers | 这些方法请求服务器上的用户列表 |
JoinGroup, LeaveGroup, GetUsersFromGroup, GetGroupInfo, GetAllGroups | 与服务器上的组配合使用的方法 |
NeedSendFullFrame | 要求尽快发送完整帧 |
Reconnect | 连接断开后,重新连接到TRVCamReceiver或TRVMediaServer |
ReStartServer | 重启 TRVMediaServer |
SendCmd, BeginCmd, EndCmd, WaitSendCmd | 向TRVCamReceiver发送命令的方法(当发送方通过网络与TRVCamReceiver直接连接或通过TRVMediaServer连接时) |
SendFile, SendUserData | 发送文件和任意数据的方法 |
SendMediaAccessRequest, SendMediaAccessCancelRequest | 该方法简化了默认接收者的管理 |
# 9.3.1. AddAllowedSender, RemoveAllowedSender, AddAllowedSenders, ClearAllowedSenders, HelloToAllowedSenders, GoodbyeToAllowedSenders 方法
procedure AddAllowedSender(GUID : TGUID);
procedure RemoveAllowedSender(GUID : TGUID);
procedure AddAllowedSenders(GUID : array of TGUID; Count : Integer);
procedure ClearAllowedSenders(AllowAll: Boolean);
procedure HelloToAllowedSenders;
procedure GoodbyeToAllowedSenders;
2
3
4
5
6
允许筛选出服务器上发件人的方法。
仅当此发送者通过网络连接到TRVMediaServer时,方法才有效。 它们允许定义可以向该客户端发送数据的客户端列表。

最初,此列表为空,服务器可以从所有客户端向该客户端发送数据。如果在此列表中添加了至少一个客户端,则服务器只能从此列表中包含的客户端向该客户端发送数据。
AddAllowedSender / RemoveAllowedSender将用户添加/删除到允许的发件人列表中。 AddAllowedSenders添加多个用户。 ClearAllowedSenders删除所有允许的发件人。
如果使用AllowAll = True调用ClearAllowedSenders,则此客户端可以从所有客户端接收消息,就如同初始状态。如果使用AllowAll = False调用ClearAllowedSenders,或者通过调用RemoveAllowedSender删除了最后一个允许的发件人,则此客户端不接受任何其他客户端的数据。
客户端可以通过调用HelloToAllowedSenders通知允许的发件人,并通过调用GoodbyeToAllowedSenders通知退出的发件人。如果调用了HelloToAllowedSenders,并且此客户端与服务器之间的连接断开,则服务器本身会通知允许的发送方此客户端正在退出。在OnUserEnter和OnUserExit事件中通知允许的发件人。
如果更改TRVMediaServer.KeepClientInfoMode,则当此客户端断开连接时,服务器可以保留允许的发件人列表。
# 9.3.2. AddDefaultReceiver, RemoveDefaultReceiver, HelloToDefaultReceivers, GoodbyeToDefaultReceivers 方法
procedure AddDefaultReceiver(GUID : TGUID);
procedure RemoveDefaultReceiver(GUID : TGUID);
procedure HelloToDefaultReceivers;
procedure GoodbyeToDefaultReceivers;
2
3
4
与服务器上的默认接收者列表一起使用的方法。
仅当此发送者通过网络连接到TRVMediaServer时,方法才有效。
如果GUIDTo和GUIDGroups为空,则音频和视频将发送到默认接收器。 命令和文件也可以发送到默认接收者。

服务器可以为每个客户端创建默认接收者列表。客户端本身通过调用AddDefaultReceiver / RemoveDefaultReceiver来添加和删除默认接收者。
客户端可以通过调用HelloToDefaultReceivers来通知其默认接收者,并通过调用GoodbyeToDefaultReceivers来通知其退出。如果调用了HelloToDefaultReceivers,并且此客户端与服务器之间的连接断开,则服务器本身会通知默认接收者该客户端正在退出。默认接收者在OnUserEnter和OnUserExit事件中得到通知。
如果更改TRVMediaServer.KeepClientInfoMode,则当此客户端断开连接时,服务器可以保留默认接收者列表。
另外,该组件提供了一组方法来简化默认接收者的管理:
- SendMediaAccessRequest,SendMediaAccessCancelRequest(默认接收者列表中的添加/删除请求)
- AllowMediaAccess,CancelMediaAccess(用于在默认接收者列表中添加和删除的替代方法)
# 9.3.3. AllowMediaAccess, CancelMediaAccess 事件
procedure AllowMediaAccess(const GUID: TRVMAnsiString);
procedure CancelMediaAccess(const GUID: TRVMAnsiString);
2
该方法简化了默认接收者的管理。
当TRVCamSender作为客户端的一部分连接到TRVMediaServer时,这些方法很有用。
AllowMediaAccess允许将视频和音频发送到GUID标识的另一个客户端(通过将该客户端添加到默认接收者列表中来实现)。 从TRVCamReceiver.OnMediaAccessRequest事件调用此方法。
CancelMediaAccess停止将视频和音频发送到由GUID标识的另一个客户端(通过从默认接收者列表中排除该客户端来实现)。从TRVCamReceiver.OnMediaAccessCancelRequest事件中调用此方法。
# 9.3.4. GetAllUsers, GetAllOnlineUsers 事件
procedure GetAllUsers;
procedure GetAllOnlineUsers;
2
这些方法请求服务器上的用户列表。
当一对TRVCamSender和TRVCamReceiver(在单个应用程序内部)通过网络作为客户端连接到TRVMediaServer时,这些方法有效。
该方法请求用户列表。 服务器将此信息发送到接收方,并发生OnGetAllUsers / OnGetAllOnlineUsers。
如果服务器的KeepClientInfoMode = rvkclmWhileOnline,则这些方法将返回相同的列表。 否则,服务器将存储有关脱机客户端的信息。
# 9.3.5. JoinGroup, LeaveGroup, GetUsersFromGroup, GetGroupInfo, GetAllGroups 事件
procedure JoinGroup(AGUIDGroup: TGUID; Permanent: Boolean = False;
AGroupName: TRVMAnsiString = ''; AGroupPassword: TRVMAnsiString = '';
OnlyExistingGroup: Boolean = False);
procedure LeaveGroup(GUIDGroup: TGUID);
procedure GetUsersFromGroup(GUIDGroup: TGUID; Online: Boolean);
procedure GetAllGroups;
procedure GetGroupInfo(AGUIDGroup: TGUID);
2
3
4
5
6
7
与服务器上的组配合使用的方法。
仅当此发送者通过网络连接到TRVMediaServer时,方法才有效。
服务器可能具有几组客户端(用户)。 属于一个组的用户可以彼此交换数据。 组由唯一标识符(GUIDGroup)标识。 群组可用于实现聊天室功能。

加入和离开
JoinGroup 将此发件人添加到服务器上的组(由GUIDGroup标识)。如果参数OnlyExistingGroup = True,则只有在服务器上已经存在用户时,用户才加入该组,否则将创建一个新组(如果服务器上的组数不超过TRVMediaServer.MaxGroupCount)。
当新用户加入现有组时,该组的所有成员都会收到有关该新用户的通知(其接收者的OnUserJoinsGroup事件)。
用户可以指定组名和密码。如果此方法创建一个新组,则所有其他用户必须指定相同的密码才能加入该组。
如果参数Permanent = False,则用户将成为该组的成员,直到他/她呼叫LeaveGroup或断开与该客户端的连接为止。用户离开该组时,将通知所有其他用户(接收方的OnUserLeavesGroup事件)。
如果参数Permanent = True,则无法在该组中删除该用户。当用户呼叫LeaveGroup时,或者当他/她与服务器断开连接时,他/她变为“脱机”,但他/她仍然是该组的成员。仅当使用Permanent = False重新加入该用户后,才能将其从组中删除。此功能允许将组用作联系人列表。
LeaveGroup 从组中删除该发件人。该组的所有成员都会收到有关此用户退出该组的通知(其接收者的OnUserLeavesGroup事件)。如果它是该组的最后一个用户,则该组将在服务器上删除。如果此客户端与服务器之间的连接断开,则服务器本身将通知该用户退出的组成员。
接收信息
GetUsersFromGroup 接收属于该组的用户列表。 如果参数Online = True,则仅返回当前连接的组用户。 在接收者的OnGetGroupUsers中返回用户列表。
GetAllGroups 返回服务器上的组列表。 仅当TRVMediaServer.CmdOptions中包含rvcpUseSystemCmd和rvcpCmdAllGroups时,才支持此命令。 在接收者的OnGetAllGroups中返回组列表。
GetGroupInfo 返回有关特定组(其名称和创建者)的信息。 该信息在接收者的OnGetGroupInfo中返回。
# 9.3.6. NeedSendFullFrame 方法
procedure NeedSendFullFrame;
要求尽快发送完整帧。
如果Encoding = rvet*Change,则此方法可能很有用。 在这些模式下,每FullFrameInterval帧发送一个完整帧。 如果长时间未发送完整帧(当视频帧速率低和/或视频图像是静态的,因此由于帧相同而导致不发送帧)时,接收器可以等待相当长的时间才能开始显示视频( 因为它只有在接收到全帧后才能开始显示视频)。 此方法允许在指定时间发送完整帧。
例如,在ClientServer \ VideoChat \ Lecture \ demo中使用此方法。 如果没有这种方法,则只有在讲师最多更换10张幻灯片后,新学生才能收到幻灯片(因为讲师的FullFrameInterval = 10)。
# 9.3.7. Reconnect 方法
procedure Reconnect;
连接断开后,重新连接到TRVCamReceiver或TRVMediaServer。
# 9.3.8. RestartServer 方法
procedure ReStartServer;
如果此发送者通过网络连接到媒体服务器,则此方法向服务器发送命令以重新启动它。
如果服务器的CmdOptions属性中包含rvcpUseSystemCmd和rvcpCmdResetServer,则将处理此命令。
# 9.3.9. SendCmd, BeginCmd, EndCmd, WaitSendCmd 方法
procedure BeginCmd;
procedure EndCmd;
procedure WaitForSendCmd(IsProcessMessages: Boolean; AMediaIndex: Word = 0);
procedure SendCmd(Cmd: TRVCmd; vGUIDTo: TRVMAnsiString = '';
vGUIDGroup: TRVMAnsiString = ''; AMediaIndex: Word = 0);
2
3
4
5
向TRVCamReceiver发送命令的方法(当发送方通过网络与TRVCamReceiver直接连接或通过TRVMediaServer连接时)。
连接到TRVMediaServer时:
发送到服务器的命令名称不得以“ RV_”或“ RVS_”开头。这些前缀为系统命令保留。
SendCmd将Cmd发送到vGUIDTo中指定的客户端(如果vGUIDTo为empy,则改用GUIDTo属性)。如果它们为空,则将命令发送到属于具有标识符vGUIDGroup的组的客户端(如果vGUIDGroup为空,则改用GUIDGroup属性)。否则,命令将发送到默认接收器(如果已定义)。当客户端的接收方收到命令时,将发生OnReceiveCmdData事件。
名称以“ RVSU_”开头的命令将被特别处理。它们被发送到服务器本身(忽略GUID参数)。当服务器收到它时,发生OnServerCmd事件。服务器不会将这些命令重新发送给客户端。发送给服务器的命令不得太大:包括所有内部信息在内的命令总大小不得超过8912字节。
连接到TRVCamReceiver时:
SendCmd将Cmd发送到接收方,vGUIDTo可以指定接收方标识符(如果vGUIDTo为empy,则改用GUIDTo属性)。组标识符将被忽略。当接收方收到命令时,将发生OnReceiveCmdData事件。
发送命令
SendCmd仅启动发送,并在实际发送此命令之前退出。不要释放Cmd对象,它将由TRVCamSender释放。
您可以使用WaitForSendCmd等待所有命令发送完毕。如果IsProcessMessages = True,则WaitForSendCmd包含一个调用Application.ProcessMessages的循环,因此请在之后检查Application.Terminated。
如果需要发送多个命令,请调用BeginCmd,然后调用多个SendCmd,然后调用EndCmd。在这种模式下,命令在调用SendCmd时会累积,并且仅在EndCmd中发送。
媒体渠道
可选的AMediaIndex参数允许定义媒体频道的索引,从而将此命令链接到该频道。在大多数应用程序中,可以将此参数保留为0。
# 9.3.10. SendFile, SendUserData 事件
procedure SendFile(FileName: String; FileSeek: Int64 = 0;
vGUIDTo: TRVMAnsiString = ''; vGUIDGroup: TRVMAnsiString = '';
AMediaIndex: Word = 0);
procedure SendUserData(AStream: TMemoryStream;
vGUIDTo: TRVMAnsiString = ''; TRVMAnsiString: TRVMAnsiString = '';
AMediaIndex: Word = 0);
2
3
4
5
6
发送文件和任意数据的方法。
连接到TRVMediaServer时:这些方法将数据发送到vGUIDTo中指定的客户端(如果vGUIDTo为empy,则改用GUIDTo属性)。如果它们为空,则将数据发送到属于具有标识符vGUIDGroup的组的客户端(如果vGUIDGroup为空,则改用GUIDGroup属性)。否则,命令将发送到默认接收器(如果已定义)。
连接到TRVCamReceiver时:该方法将数据发送到接收器,vGUIDTo可以指定接收器标识符(如果vGUIDTo为empy,则改用GUIDTo属性)。组标识符将被忽略。
SendFile 发送文件FileName(从FileSeek参数中定义的位置(以字节为单位))。
SendUserData 从AStream发送数据。
媒体渠道
可选的AMediaIndex参数允许定义媒体频道的索引,从而将此文件/数据链接到该频道。在大多数应用程序中,可以将此参数保留为0。
可以同时发送不同频道中的文件和数据。
在接收方
TRVCamReceiver接收文件时,将发生OnReceivingFile,OnReceiveFileData,OnReceivedFile事件。
TRVCamReceiver接收用户数据时,将发生OnReceiveUserData事件。
# 9.3.11. SendMediaAccessRequest, SendMediaAccessCancelRequest 方法
procedure SendMediaAccessRequest(const GUID: TRVMAnsiString; ADataType: Word = RVMEDIA_DATA);
procedure SendMediaAccessCancelRequest(const GUID: TRVMAnsiString; ADataType: Word = RVMEDIA_DATA);
2
该方法简化了默认接收者的管理。
当TRVCamSender作为客户端的一部分连接到TRVMediaServer时,这些方法很有用。
SendMediaAccessRequest 向GUID标识的客户端发送请求;作为响应,该客户端可以开始向请求者发送数据(通常是视频和音频)。
SendMediaAccessCancelRequest 向GUID标识的客户端发送请求;作为响应,该客户端应停止向请求者发送数据。
从技术上讲,这些方法可用于发送特殊的命令,例如SendCmd。
参数:
GUID –从中请求媒体的其他客户端的标识符。如果GUID为空,则使用GUIDTo。如果也为空,则此请求将发送到组GUIDGroup。
ADataType –保留供将来使用(计划:它将列出提出请求的数据类型,可以包含*** _ DATA常量(使用“或”运算符组合)。如果未指定此参数,则假定音频和视频)。
例:
有两个客户端ClientA和ClientB连接到介质服务器。 ClientA由RVCamSenderA和RVCamReceiverA组成,ClientB由RVCamSenderB和RVCamReceiverB组成。客户A的标识符为GUID_A,客户B的标识符为GUID_B。
ClientA希望通过网络从ClientB接收视频和音频。它调用RVCamSenderA.SendMediaAccessRequest(GUID_B)。作为响应,TRVCamReceiverB.OnMediaAccessRequest事件发生。在这种情况下,ClientB(如果同意将视频和音频发送到ClientA)调用TRVCamSenderB.AllowMediaAccess(GUID_A)。
接下来,ClientA不再希望从ClientB接收视频和音频。它调用RVCamSenderA.SendMediaAccessCancelRequest(GUID_B)。作为响应,TRVCamReceiverB.OnMediaAccessCancelRequest事件发生。在这种情况下,ClientB应该调用TRVCamSenderB.CancelMediaAccess(GUID_A)。
# 10. TRVCamReceiver 组件
TRVCamReceiver通过网络从TRVCamSender或TRVMediaServer接收视频和音频。
分配Active = True激活接收器。 该组件通过网络从一个或多个TRVCamSender组件接收视频和音频数据。 如果收件人可以从多个发件人处接收,则应将发件人的标识符添加到发件人。
除了音频和视频,接收器还可以接收命令,文件和二进制数据。
接收器接收的视频可以显示在TRVCamView或TRVCamMultiView组件中。
接收器接收的视频和音频可以使用TRVCamSender组件进一步发送。
# 10.1. 属性
属性 | 属性说明 |
---|---|
Active | 启用接收 |
AudioLatency, VideoLatency | 延迟(以毫秒为单位) |
BufferDuration | 指定音频数据的缓冲区大小(以毫秒为单位) |
BufferSize | 定义用于接收数据的缓冲区的大小 |
Color | 指定丢失的视频帧片段的颜色 |
ConnectionProperties | 定义连接属性 |
FilterSystemCmd | 指定系统命令是否调用OnReceiveCmdData事件 |
GUIDMy | 该接收者的标识符 |
IgnoreCorruptedFrames | 指定在帧链中如何处理丢失或损坏的帧 |
JpegIntegrity | 指定如何检查收到的jpeg图像(视频帧),参考TRVCamera.JpegIntegrity |
Mute | 允许/禁止播放从网络接收到的声音 |
Port | 指定连接的端口 |
Protocol | 定义用于接收数据的协议 |
ReceiveMediaTypes | 定义组件接收的媒体类型(视频,音频等) |
RetryCount | 指定尝试连接的最大次数 |
Senders | 潜在发件人的集合,该集合的工作方式取决于发起连接的一侧。 |
SessionKey, SessionKey2 | 返回当前会话的标识符 |
SmoothImage | 通过从最后收到的几个视频帧中创建图像来平滑视频帧 |
State | 返回接收器状态 |
SynchonizedReceiveUserData | 定义OnReceiveUserData事件的线程上下文 |
TCPConnectionType | 指定哪一侧启动TCP / HTTP连接 |
Volume | 返回或更改此应用程序的扬声器音量 |
# 10.1.1. Active 属性
property Active: Boolean;
启用接收。
每次将Active从False更改为True时,SessionKey的值都会更改。
可参考State。
# 10.1.2. AudioLatency, VideoLatency 属性
property VideoLatency: Word;
property AudioLatency: Word;
2
延迟(以毫秒为单位)。
如果未经过指定时间,则不会播放视频帧/音频片段。
AudioLatency非常重要,它可以确保在播放之前已接收到所有音频片段。
VideoLatency允许将视频与音频同步。 如果您不打算接收音频,建议指定VideoLatency = 0以节省资源。
# 10.1.3. BufferSize 属性
property BufferSize: Cardinal;
定义用于接收数据的缓冲区的大小。
当流量较高时,较大的缓冲区大小可提供更快的发送速度(但是,接收数据的部分之间的暂停会增加)。
# 10.1.4. ConnectionProperties 属性
property ConnectionProperties: TRVConnectionProperties;
ConnectionProperties包含以下属性:
- VideoTimeout: Integer (default value = DefaultWaitForVideo)
- AudioTimeout: Integer (default value = DefaultWaitForAudio)
- CmdTimeout: Integer (default value = DefaultWaitForCmd)
- DataTimeout: Integer (default value = DefaultWaitForData)
- FileTimeout: Integer read (default value = DefaultWaitForFile)
- UseBlockingSocketsForVideo: Boolean (default value = False)
- UseBlockingSocketsForAudio: Boolean (default value = False)
- UseBlockingSocketsForCmd: Boolean (default value = True)
- UseBlockingSocketsForData: Boolean (default value = False)
- UseBlockingSocketsForFile: Boolean (default value = True)
其中默认值定义如下:
const
DefaultWaitForVideo := 3000;
DefaultWaitForAudio := 3000;
DefaultWaitForCmd := 15000;
DefaultWaitForData := 10000;
DefaultWaitForFile := 10000;
2
3
4
5
6
TimeOut属性为指定类型的数据的非阻塞套接字定义最大等待时间(以毫秒为单位)。 如上所示,命令的等待时间最长,因为命令是最重要的(对于稳定工作甚至可能至关重要)。
如果UseBlockingSockets * = True
该组件发出请求,并等待另一方做出响应(或断开连接)。 超时没有断开连接。
优点: 所有发送的数据将被接收。
缺点: 稳定; 如果一个应用程序挂起,其他应用程序也挂起。
如果UseBlockingSockets * = False
该组件发出请求,并等待另一方做出响应或断开连接,或者等待超时间隔过去。
优点: 稳定性; 如果一个应用程序挂起,或者由于太忙而无法处理请求,则另一个应用程序会在超时后断开连接,因此它可以继续工作。
缺点: 如果其他应用程序繁忙,则数据可能会丢失,连接将断开。
# 10.1.5. FilterSystemCmd 属性
property FilterSystemCmd: Boolean;
指定系统命令是否调用OnReceiveCmdData事件。
名称以“ RV_”和“ RVS_”开头的命令是系统命令。
如果为True,则系统命令不会调用此事件。
如果为False,则系统命令将调用此事件。 这对于调试很有用。
# 10.1.6. GUIDMy 属性
property GUIDMy: String;
该接收者的标识符。
如果定义,则此接收器仅接受包含与接收器相同的标识符(TRVCamSender.GUIDTo)的数据。 它有助于在网络攻击期间忽略未经授权的发送者。
如果为空,则此接收器接受所有数据。
此外,当此接收器作为客户端的一部分连接到TRVMediaServer时,将使用此属性。
请勿为此属性分配全零的GUID(即'{00000000-0000-0000-0000-0000-000000000000}'
)。
# 10.1.7. IgnoreCorruptedFrames 属性
property IgnoreCorruptedFrames: Boolean;
指定在帧链中如何处理丢失或损坏的帧。
如果将正值分配给TRVCamSender.FrameDifferenceInterval,则发送一帧帧。 链中的第一帧照原样发送,后续帧作为新帧与旧帧之间的差异发送。
此属性指定如果链中的一帧丢失或损坏(在UDP连接中可能会出现这样的情况),接收方的工作方式。
如果为True,则仍显示帧,但可能出现视觉伪影。
如果为False,则删除损坏/丢失的帧之后的其余链条。
# 10.1.8. Mute 属性
property Mute: Boolean;
允许/禁止播放从网络接收到的声音。
此属性不会更改扬声器的系统“静音”属性,它只会使此组件接收到的声音静音。
如果分配了AudioOutput,则将忽略此属性,而改用AudioOutput.Mute。
# 10.1.9. Port 属性
property Port: Word;
指定连接的端口。
必须在将连接到此接收器的所有发送器组件的ReceiverPort属性中指定相同的值。
# 10.1.10. Protocol 属性
property Protocol: TRVProtocol;
定义用于接收数据的协议。
有关TRVCamSender和TRVCamReceiver之间连接的建议:
如果您不仅需要发送视频和音频,还需要发送其他类型的数据(命令,文件等),请创建两对Sender + Receiver。 对于第一个发送方,分配Protocol = rvpUDP,将其连接到第一个接收方(具有相同的Protocol属性值),并用于传输视频和音频数据。 对于第二个发送方,分配Protocol = rvpTCP(或rvpHTTP),将其连接到第二个接收方(具有相同的Protocol属性值),并用于传输命令,文件等。
TRVCamReceiver和TRVMediaServer之间的连接建议:
连接服务器-接收器必须始终为HTTP或TCP。
# 10.1.11. ReceiveMediaTypes 属性
property ReceiveMediaTypes: TRVMediaTypes;
定义组件接收的媒体类型(视频,音频等)。有rvmtVideo, rvmtAudio, rvmtUserData, rvmtFileData, rvmtCmdData等选项可选。参考TRVCamSender.SendMediaTypes。
# 10.1.12. Senders 属性
property Senders: TRVSenderCollectionEx;
潜在发件人的集合,该集合的工作方式取决于发起连接的一侧。
选项1:从TRVCamSender连接到TRVCamReceiver
如果Protocol = rvpUDP或TCPConnectionType = rvtcpSenderToReceiver,则会发生这种类型的连接。
发件人用作定义可以接受哪些连接的筛选器。
发件人中的每个项目(TRVSenderItemEx)指定可以从item.SenderHost中指定的地址接受哪些连接。如果项目具有非空的GUIDFrom,则接收者仅接受具有相同GUIDFrom值的发送者。如果item.GUIDFrom为空,则将项目属性AudioSenders,VideoSenders,UserDataSenders,CmdSenders,FileSenders用作筛选器(但是,与TRVMediaServers通信时,这些属性更有意义,请参见下文)。
如果发件人为空,则接受来自任何发件人的连接。
选项2:从TRVCamReceiver到TRVCamSender的连接
当Protocol = rvpTCP(或rvpHTTP)和TCPConnectionType = rvtcpReceiverToSender时,将发生这种类型的连接。
收件人将连接到“发件人”中列出的所有发件人。对于每一项,接收方都连接到地址项。SenderHost:item.SenderPort。要成功建立连接,item.GUIDFrom必须等于sender.GUIDFrom。
选项3:从TRVMediaServer到TRVCamReceiver的连接
此模式需要以下设置:Protocol = rvpTCP(或rvpHTTP)和TCPConnectionType = rvtcpReceiverToSender。
通常,属性应具有与选项2相同的设置。但是:
- item.SenderHost必须指定服务器地址
- item.GUIDFrom应该为空
- 项目属性AudioSenders,VideoSenders,UserDataSenders,CmdSenders,FileSenders可能包含允许将数据发送到此接收器的客户端列表;如果它们为空,则根据VideoDefaultAcceptAll,AudioDefaultAcceptAll,UserDefaultAcceptAll,FileDefaultAcceptAll,CmdDefaultAcceptAll属性,接受/拒绝来自此服务器所有客户端的数据。
# 10.1.13. SessionKey, SessionKey2 属性(只读)
property SessionKey: TRVSessionKey;
property SessionKey2: TRVSessionKey;
2
返回当前会话的标识符。
每当Active变为True时,SessionKey的值都会更改(增加1)。 当Active = False时,此属性返回0。
SessionKey的值作为参数传递给TRVCamReceiver的事件。 如果您在事件内执行耗时的操作,则比较此属性和SessionKey参数的值以确保未关闭或重新打开连接是有意义的。
SessionKey的值不必等于连接的TRVCamSender的SessionKey(它们彼此完全独立)。
注意: SessionKey在整个连接期间都返回非零值,不仅是在所有通道都打开时(甚至在未创建通道的模式下)。
当Active = True时,SessionKey2返回与SessionKey相同的值。 但是,当Active = False时,它将返回上一个会话的密钥。
# 10.1.14. SmoothImage 属性
property SmoothImage: Boolean;
通过从最后收到的几个视频帧中创建图像来平滑视频帧。
当前属性为实验性质。
如果为True,则通过根据最近接收的几(3)个帧创建图像来平滑视频帧。
优点: 消除图像中的噪点,尤其是在光线不足的情况下。
缺点: 使运动对象模糊。
我们不建议将这种模式用于包含快速更改计时器的视频,或者如果视频的帧速率较低时。
# 10.1.15. State 属性(只读)
type // Defined in MRVType unit
TRVMState = (rvmsDisconnect, rvmsConnecting, rvmsConnect, rvmsDisconnecting);
property State: TRVMState;
2
3
返回接收器状态。
参数 | 含义 | 对应的Active属性值 |
---|---|---|
rvmsDisconnect | 接收器已断开连接 | False |
rvmsConnecting | 接收器正在连接 | True |
rvmsConnect | 接收器已连接 | True |
rvmsDisconnecting | 接收器正在断开连接 | True |
当State = rvmsConnect时,组件可以接收数据。 如果State = rvmsDisconnect,则无法接收数据。 当State=rvmsConnecting和rvmsDisconnecting时,组件正在等待,并且操作不可用。
# 10.1.16. SynchonizedReceiveUserData 属性
property SynchonizedReceiveUserData: Boolean;
定义OnReceiveUserData事件的线程上下文。
如果为False,则在线程上下文中调用此事件。
如果为True,则在主进程的上下文中调用此事件。
# 10.1.17. TCPConnectionType 属性
property TCPConnectionType: TRVTCPConnectionType;
指定哪一侧启动TCP / HTTP连接。
如果Protocol = rvpTCP或rvpHTTP,则使用此属性。
与TRVCamSender连接时,此值必须等于发送者的TCPConnectionType。
# 10.1.18. Volume 属性
property Volume: Word;
返回或更改此应用程序的扬声器音量。
值的范围是0..65535。
此属性更改应用程序扬声器的系统音量。
如果分配了AudioOutput,请改用AudioOutput.Volume。
# 10.2. 事件
事件 | 何时触发 |
---|---|
OnConnected, OnConnecting, OnDisconnect, OnConnectError | 与TRVMediaServer或TRVCamSender连接/断开连接时触发事件 |
OnDecodeAudio | 接收音频数据时触发事件 |
OnGetGroupInfo | 响应TRVCamSender.GetGroupInfo而发生事件 |
OnRequestJoinGroup | 在响应TRVCamSender.JoinGroup时发生事件 |
OnGetAllGroups | 响应TRVCamSender.GetAllGroups而发生事件 |
OnGetAllUsers, OnGetAllOnlineUsers | 响应TRVCamSender.GetAllUsers / GetAllOnlineUsers而发生事件 |
OnGetGroupUsers | 响应TRVCamSender.GetUsersFromGroup而发生事件 |
OnGetImage | 当组件接收视频帧时,将发生此事件 |
OnOpenChannel, OnCloseChannel | 这些事件在打开特定媒体类型的连接之前和之后发生 |
OnReceiveCmdData | 响应TRVCamSender.SendCmd发生事件 |
OnReceiveFileData | 响应TRVCamSender.SendFile发生该事件 |
OnReceiveUserData | 响应TRVCamSender.SendUserData发生该事件 |
OnSessionConnected, OnSessionDisconnected | 连接/断开所有通道时,将发生事件 |
OnUserEnter, OnUserExit | 在响应TRVCamSender.HelloToDefaultReceivers / GoodbyeToDefaultReceivers和HelloToAllowedSenders / GoodbyeToAllowedSenders时发生事件 |
OnUserJoinsGroup, OnUserLeavesGroup | 在响应TRVCamSender.JoinGroup和LeaveGroup时发生事件 |
OnMediaAccessRequest, OnMediaAccessCancelRequest | 响应TRVCamSender.SendMediaAccessRequest和SendMediaCancelAccessRequest而发生事件 |
# 10.2.1. OnConnected, OnConnecting, OnDisconnect, OnConnectError 事件
与TRVMediaServer或TRVCamSender连接/断开连接时发生的事件。
当发送者开始与接收者的连接或接收者开始与发送者/服务器的连接时,就会发生OnConnecting事件。 有关说明,请参见有关连接模式。
OnConnecting之后,会发生OnConnected或OnConnectError事件。 连接成功后,将发生OnConnected事件。 OnConnectError在连接失败时发生。
OnDisconnect发生在断开连接时。
如果发送方启动连接,则MediaTypes参数为空。
如果接收方开始连接,则在打开用于特定数据类型的通道的过程中将调用这些事件,因此MediaTypes参数包含用于标识通道的单个数据类型。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.2. OnDecodeAudio 事件
接收音频数据时触发事件。
AStream包含音频数据。 通常,它是带有参数ASamplesPerSec和ABitsPerSample的原始数据,但它们可以在TRVCamSender.OnEncodeAudio事件中进行编码。
您可以自己播放声音。 如果执行此操作,则将False分配给DoDefault参数。
否则,您可以使用此事件解码在TRVCamSender.OnEncodeAudio中编码的声音。
# 10.2.3. OnGetGroupInfo 事件
响应TRVCamSender.GetGroupInfo而发生事件。
当一对TRVCamSender和TRVCamReceiver(在单个应用程序内部)作为客户端通过网络连接到TRVMediaServer时,将发生此事件。
TRVCamSender.GetGroupInfo请求有关该组的信息。 服务器将此信息发送到接收方,并发生OnGetGroupInfo。
- 参数:
- GUIDGroup –组的标识符(与TRVCamSender.GetGroupInfo的参数相同)
- AGUIDOwner –创建此组的客户端的标识符。
- AGroupName –组的名称(与创建该组时的TRVCamSender.JoinGroup的参数相同)
- ACmd –包含此信息的命令。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保连接未关闭或重新打开。
# 10.2.4. OnRequestJoinGroup 事件
在响应TRVCamSender.JoinGroup时发生事件。
当一对TRVCamSender和TRVCamReceiver(在单个应用程序内部)作为客户端通过网络连接到TRVMediaServer时,将发生此事件。
TRVCamSender.JoinGroup请求加入服务器上的指定组。 服务器将此信息发送到接收方,并发生OnRequestJoinGroup。
- 参数:
- GUIDGroup –组的标识符(与TRVCamSender.JoinGroup的参数相同)
- AAccess –如果用户成功,则为True(可以从AError参数接收扩展信息)
- AError –错误(或成功)代码。
AError值 | 含义 |
---|---|
RV_ERROR_CMD_SUCCESS | 用户已成功加入该组(无错误) |
RV_ERROR_CMD_BAD_PASSWORD | 用户未加入组,因为提供的密码不正确 |
RV_ERROR_CMD_GROUP_EXISTS | 用户未加入该组,因为该组在服务器上不存在 |
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.5. OnGetAllGroups 属性
响应TRVCamSender.GetAllGroups而发生事件。
当一对TRVCamSender和TRVCamReceiver(在单个应用程序内部)作为客户端通过网络连接到TRVMediaServer时,将发生此事件。
仅当TRVMediaServer.CmdOptions中包含rvcpUseSystemCmd和rvcpCmdAllGroups时,才支持此命令。
TRVCamSender.GetAllGroups请求服务器上所有组的列表。 服务器将此列表发送到接收方,然后发生OnGetAllGroups。
组列表包含在ACmd参数中。
此命令具有以下参数:
GUIDCount(整数)–返回的组数
GUIDGroup1,GUIDGroup2,...(字符串)–组标识符(从1到GUIDCount的值)
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.6. OnGetAllUsers, OnGetAllOnlineUsers 事件
响应TRVCamSender.GetAllUsers / GetAllOnlineUsers而发生事件。
当一对TRVCamSender和TRVCamReceiver(在单个应用程序内部)通过网络作为客户端连接到TRVMediaServer时,会发生这些事件。
仅当TRVMediaServer.CmdOptions中包含rvcpUseSystemCmd和rvcpCmdAllUsers时,才支持这些命令。
TRVCamSender GetAllUsers(或GetAllOnlineUsers)请求服务器上所有用户的列表。 服务器将此列表发送给接收方,然后发生OnGetAllUsers(或GetAllOnline)。
用户列表包含在ACmd参数中。
此命令具有以下参数:
GUIDCount(整数)–返回的用户数。
GUIDUser1,GUIDUser2,...(字符串)–用户标识符(从1到GUIDCount的值)
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.7. OnGetGroupUsers 属性
响应TRVCamSender.GetUsersFromGroup而发生事件。
当一对TRVCamSender和TRVCamReceiver(在单个应用程序内部)作为客户端通过网络连接到TRVMediaServer时,将发生此事件。
TRVCamSender.GetUsersFromGroup向服务器请求属于某个组的客户端列表。 服务器将此列表发送给接收方,然后发生OnGetGroupUsers。
- 参数:
- GUIDGroup –组的标识符(与TRVCamSender GetUsersFromGroup的参数相同)
- GUIDUsers –属于该组的用户的标识符列表。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.8. OnGetImage 事件
当组件接收视频帧时,将发生此事件。
图片在Img参数中返回。 您不能自己释放Img。 您可以修改此图像。
AGUIDFrom是发送此图像的发送者的标识符。
AGUIDFrom是接收者的标识符。
此事件在线程上下文中调用。
# 10.2.9. OnOpenChannel, OnCloseChannel 事件
这些事件在打开特定媒体类型的连接之前和之后发生。
通道是用于传输媒体类型之一的数据的连接。 接收者最多可以接受ReceiveMediaTypes属性中指定的5种媒体类型。 打开所有通道后,将建立一个会话。
仅当接收方启动与发送方/服务器的连接时,才使用通道和会话。 有关说明,请参见有关连接模式的主题。
连接成功的事件顺序:
- 对于每个通道:OnOpenChannel,然后是OnConnecting,然后是OnConnected;
- OnSessionConnected。
断开连接时的事件顺序:
- 对于每个通道:OnDisconnect,然后是OnCloseChannel;
- OnSessionDisconnected。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.10. OnReceiveCmdData 事件
响应TRVCamSender.SendCmd发生事件。
接收器接收到TRVCamSender发送的命令(直接或通过TRVMediaServer)后,将发生此事件。
- 参数:
- Cmd –命令及其参数。
- nGUIDFrom –发送命令的发送方的标识符(TRVCamSender.GUIDFrom)
- nGUIDGroup –服务器上组的标识符,如果此命令已发送到组。
- AMediaIndex –发送者的媒体频道的索引。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
默认情况下,接收系统命令(名称以“ RV_”或“ RVS_”开头)时不调用此事件。 如果要为这些命令调用此事件(例如,用于调试),请分配FilterSystemCmd = False。
# 10.2.11. OnReceiveFileData 事件
响应TRVCamSender.SendFile发生该事件。
当接收方开始接收文件时,将发生OnReceivingFile。
接收文件数据时,OnReceiveFileData发生(多次)。
当接收到文件时,发生OnReceivedFile。
- 参数:
- AData –收到的内容
- nGUIDFrom –发送命令的发送方的标识符(TRVCamSender.GUIDFrom)
- nGUIDGroup –服务器上组的标识符,如果此命令已发送到组。
- FileName,FileOffs -对应于TRVCamSender.SendFile的参数。 TotalFileSize –原始文件的大小。
- AMediaIndex –发送者的媒体频道的索引。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
在主进程的上下文中调用OnReceivingFile和OnReceivedFile。
在线程上下文中调用OnReceiveFileData。 在这种情况下,请勿更新用户界面(或进行需要主进程上下文的任何其他操作)。
# 10.2.12. OnReceiveUserData 属性
响应TRVCamSender.SendUserData发生该事件。
- 参数:
- AData –收到的内容
- nGUIDFrom –发送命令的发送方的标识符。
- nGUIDGroup –服务器上组的标识符,如果此命令已发送到组。
- AMediaIndex –发送者的媒体频道的索引。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
根据SynchonizedReceiveUserData属性,在线程上下文或主进程上下文中调用该事件。
不要在线程上下文中调用的事件中更新用户界面(或进行任何其他需要主进程上下文的操作)。
# 10.2.13. OnSessionConnected, OnSessionDisconnected 属性
连接/断开所有通道时,将发生事件。
仅当接收方启动与发送方/服务器的连接时,才使用通道和会话。 有关说明,请参见连接模式。
通道是用于传输媒体类型之一的数据的连接。 接收器最多可以接受ReceiveMediaTypes属性中指定的5种媒体类型(即使TRVCamSender也不发送其中一些数据,通道仍处于打开状态)。 这些通道组成一个会话。 打开所有通道后,将创建一个会话(并发生OnSessionConnected)。 如果至少一个通道关闭,则会话终止(并且发生OnSessionDisconnected)。
在尝试连接失败(未调用OnSessionConnected)之后也会发生OnSessionDisconnected。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.14. OnUserEnter, OnUserExit 属性
在响应TRVCamSender.HelloToDefaultReceivers / GoodbyeToDefaultReceivers和HelloToAllowedSenders / GoodbyeToAllowedSenders时发生事。
如果客户端通过网络连接到TRVMediaServer,则会发生此事件。
参数:
GUIDUser –进入或退出的客户端的标识符。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.15. OnUserJoinsGroup, OnUserLeavesGroup 属性
在响应TRVCamSender.JoinGroup和LeaveGroup时发生事件。
如果客户端通过网络连接到TRVMediaServer,则会发生此事件。
- 参数:
- GUIDGroup –组的标识符(与TRVCamSender JoinGroup和LeaveGroup的参数相同)
- GUIDUser –加入或离开组的客户端的标识符。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.2.16. OnMediaAccessRequest, OnMediaAccessCancelRequest 属性
响应TRVCamSender.SendMediaAccessRequest和SendMediaCancelAccessRequest而发生事件。
当另一个客户端调用SendMediaAccessRequest到此客户端时,会发生OnMediaAccessRequest。在这种情况下,您可以通过调用TRVCamSender.AllowMediaAccess将视频和音频发送到该客户端。
当另一个客户端向该客户端调用SendMediaAccessCancelRequest时,将发生OnMediaAccessCancelRequest。在这种情况下,您应该禁止通过调用TRVCamSender.CancelMediaAccess向该客户端发送数据(通常是视频和音频)。
注意:这些事件有助于管理媒体服务器上的默认接收者列表。这是发送给未指定收件人的数据(不仅是视频和音频,还包括所有类型的数据)的默认收件人的列表。
参数:
GUIDGroup –组的标识符(如果向组发出请求)
GUIDUser –客户端请求者的标识符。
ADataType –保留供将来使用。
如果您在事件内执行耗时的操作,则比较SessionKey参数和SessionKey属性的值以确保未关闭或重新打开连接是有意义的。
# 10.3. 方法
# 10.3.1. GetOpenChannelCount, GetMaxChannelCount 方法
function GetOpenChannelCount: Integer;
function GetMaxChannelCount: Integer;
2
该方法返回打开的通道数和最大可能的通道数。
如果TRVCamSender启动连接,则最大通道数为1。如果TRVCamReceiver启动连接,则为ReceiveMediaTypes中指定的每种数据类型创建一个通道。有关说明,请参见连接模式。
# 11. TRVMicrophone 组件
TRVMicrophone从麦克风读取声音。
可以将TRVMicrophone分配为TRVCamSender的音频源,以将声音发送到网络。
可以将TRVMicrophone分配为TRVMicrophoneView的音频源,以可视化其活动。
使用方法
选择麦克风(或其他音频输入设备)
默认情况下,组件从默认音频输入设备读取声音。您可以选择其他设备。
AudioInputDeviceList数组属性中返回可用设备的列表,AudioInputDeviceCount属性中返回设备的数目。
您可以通过分配AudioInputDeviceIndex属性来选择设备(可以在AudioInputDeviceList中分配索引,或-1以选择默认设备)。
麦克风发出的声音
如果Active = True,则组件从麦克风读取声音。
以下属性允许更改麦克风的系统属性(影响所有应用程序):Volume。
以下属性允许在播放/发送之前更改从麦克风读取的声音:VolumeMultiplier,NoiseReduction,Pitch。
Mute会关闭麦克风的读数。
以下属性允许截断非信息性声音:SoundMinLevel,SoundIgnoreInterval。下图显示了它们的定义。黄色曲线表示声音振幅随时间变化的绝对值。在以下情况下,该组件将忽略声音:(1)位于SoundMinLevel以下,(2)位于SoundIgnoreInterval定义的区间内。
声音质量在BitsPerSample和SamplesPerSec属性中指定
WAV文件中的声音
要从文件读取声音,请分配SourceType = rvsstWAV,将文件名分配给WAVFileName,分配Active = True。
要将修改属性应用于从文件读取的声音,请分配WAVUseOptions = True。
在处理文件时,会发生OnOpenWavFile,OnReadWavFile,OnCloseWavFile事件。
# 11.1. 属性
属性 | 属性说明 |
---|---|
AudioInputDeviceIndex, AudioInputDeviceCount, AudioInputDeviceList | 允许选择麦克风(或其他音频捕获设备)的属性 |
BitsPerSample, SamplesPerSec | 这些属性定义从麦克风读取的声音质量 |
BufferDuration | 指定缓冲区大小(以毫秒为单位) |
Mute | 打开/关闭麦克风 |
NoiseReduction | 启用/禁用降噪 |
Pitch | 允许更改声音的音高 |
SoundIgnoreInterval | 定义声音幅度变化的最小可接受间隔 |
SoundMinLevel | 声音幅度的最小可接受值 |
SourceType | 指定声源 |
VolumeMultiplier | 麦克风音量的倍乘数 |
WAVFileName | 指定WAV文件的名称 |
WAVUseOptions | 指定组件是否将声音选项应用于WAV文件 |
# 11.1.1. AudioInputDeviceIndex, AudioInputDeviceCount, AudioInputDeviceList 属性
property AudioInputDeviceIndex: Integer;
property AudioInputDeviceCount: Integer;
property AudioInputDeviceList[Index: Integer]: String;
2
3
AudioInputDeviceCount返回音频捕获设备的计数。
AudioInputDeviceList [Index](其中Index的范围是0..AudioInputDeviceCount-1)返回设备的名称。 这些名称可以在应用程序UI中显示给用户。
在0..AudioInputDeviceCount-1到AudioInputDeviceIndex范围内分配一个值以选择设备。 或者,您可以分配-1以使用默认设备。
# 11.1.2. BitsPerSample, SamplesPerSec 属性
property SamplesPerSec: TRVSamplesPerSec;
property BitsPerSample: TRVBitsPerSample;
2
这些属性定义从麦克风读取的声音质量。
较高的值可能会提高声音质量,但也会增加流量和延迟。
“SamplesPerSec”通常称为“采样率”,“BitsPerSample”通常称为“样本大小”。
# 11.1.3. BufferDuration 属性
property BufferDuration: Word;
指定缓冲区大小(以毫秒为单位)。
当缓冲区完全填满时,组件将发送声音数据。
较小的值表示较小的滞后,但是,它可能会降低声音质量。
# 11.1.4. Mute 属性
property Mute: Boolean;
打开/关闭麦克风。
此属性不会更改音频设备的系统“Mute”属性,它只会使此组件读取的声音静音。
# 11.1.5. NoiseReduction 属性
property NoiseReduction: Boolean;
启用/禁用降噪。
# 11.1.6. Pitch 属性
property Pitch: Shortint;
允许更改声音的音高。取值范围如下:
负值(-127 ..- 1):高音调
0:不变的声音
正值(1..127):低音
此属性应用于从麦克风读取的声音。 如果WAVUseOptions = True,则它也将应用于WAV文件中的声音。
# 11.1.7. SoundIgnoreInterval 属性
property SoundIgnoreInterval: Byte;
定义声音幅度变化的最小可接受间隔。
对于给定的时间段,该组件将计算声音振幅(Av)的平均值。 如果声音幅度在间隔[Av-SoundInterval,Av + SoundInterval]中变化,则声音将被忽略。
此属性可以消除单调的嗡嗡声。
此属性应用于从麦克风读取的声音。 如果WAVUseOptions = True,则它也将应用于WAV文件中的声音。
# 11.1.8. SoundMinLevel 属性
property SoundMinLevel: Byte;
声音幅度的最小可接受值。
振幅较低的声音将被忽略。
0表示播放所有声音。
此属性可截断太安静的声音。
此属性应用于从麦克风读取的声音。 如果WAVUseOptions = True,则它也将应用于WAV文件中的声音。
# 11.1.9. SourceType 属性
type
TRVSoundSourceType = (rvsstMicrophone, rvsstWAV); // defined in MRVType unit
property SourceType: TRVSoundSourceType;
2
3
指定声源。
值 | 说明 |
---|---|
rvsstMicrophone | 话筒 |
rvsstWAV | 在WAVFileName属性中指定的WAV文件 |
# 11.1.10. VolumeMultiplier 属性
property VolumeMultiplier: Double;
麦克风音量的倍乘数。
该组件将从麦克风读取的声音信号乘以该值。
如果值= 1,声音不会改变。
如果值= 0,则声音将关闭。
如果值> 1,则音量会增加(但是声音的质量可能会降低)。
如果值<1,则减小音量。
此属性应用于从麦克风读取的声音。 如果WAVUseOptions = True,则它也将应用于WAV文件中的声音。
# 11.1.11. WAVFileName 属性
property WAVFileName: String;
指定WAV文件的名称。
如果SourceType = rvsstWAV,则组件从此文件读取声音。
为该属性分配值不会开始处理文件。 分配此属性后,需分配Active = True(即使它已经为True)。
# 11.1.12. WAVUseOptions 属性
property WAVUseOptions : Boolean;
指定组件是否将声音选项应用于WAV文件。
如果SourceType = rvsstWAV,则组件从WAV文件读取声音。
如果为True,则在播放文件时将应用以下属性:NoiseReduction,SoundMinLevel,SoundIgnoreInterval,Pitch,VolumeMultiplier。
# 11.2. 事件
事件 | 何时触发 |
---|---|
OnGetAudio | 低级别事件,在获取音频时触发 |
OnOpenWavFile, OnReadWavFile, OnCloseWavFile | 从WAV文件读取声音时会发生触发事件 |
# 11.2.1. OnOpenWavFile, OnReadWavFile, OnCloseWavFile 事件
打开WAV文件时,将发生OnOpenWavFile事件。
- 参数:
- WavSampleCount –文件中声音样本的计数
- WavSamplesPerSec –采样率
- WavBitsPerSample –位深度
- WavChanneles –通道数
读取WAV文件时发生OnReadWavFile事件。
- 参数:
- CurSample –当前声音样本的数量
- SampleCount –文件中声音样本的总数
关闭WAV文件时,将发生OnCloseWavFile事件。
- 参数:
- CurSample –最近读取的声音样本数
- SampleCount –文件中声音样本的总数
如果CurSample <SampleCount,则中止处理。 如果CurSample = SampleCount,则对文件进行竞争处理。
# 12. TRVMicrophoneView 组件
TRVMicrophoneView显示麦克风活动。它可以指示通过网络接收到的声音数据。
该组件显示从麦克风(AudioSource)读取或通过网络(ReceiverSource)接收的声音信号的音量。
该组件可以单独使用,也可以集成在TRVCamMultiView中。
该组件不播放声音,它仅以视觉方式显示音频源的活动。
# 12.1. 属性
属性 | 属性说明 |
---|---|
Orientation | 指定内容的显示方向 |
Style | 指定音量的显示方式 |
# 12.1.1. Style 属性
type // defined in MRVType unit
TRVMicrophoneStyle = (rvmpsSimple, rvmpsHistogram, rvmpsGradient, rvmpsOwnerDraw);
property Style: TRVMicrophoneStyle;
2
3
指定音量的显示方式。
如果Style = rvmpsOwnerDraw,则可以在OnPaint事件中自己绘制组件。
值 | 说明 |
---|---|
rvmpsSimple | |
rvmpsHistogram | |
rvmpsGradient | |
rvmpsOwnerDraw |
# 12.2. 事件
事件 | 何时触发 |
---|---|
OnPaint | 允许绘制显示音量的自定义图像 |
# 12.2.1. OnPaint 事件
允许绘制显示音量的自定义图像。
在Style = rvmpsOwnerDraw中使用此事件。
可以根据“| Level-127 |”的“ Level”参数来计算音量。
# 13. TRVMediaServer 组件
TRVMediaServer可以通过网络实现多个TRVCamSenders与多个TRVCamReceiver的数据(视频,音频,命令,文件)交互。
描述
要启动服务器,请定义其HTTPPort和UDPPort,并分配HTTPActive和UDPActive = True。
多个客户端可以通过网络连接到服务器。 每个客户端可能包含一个或多个TRVCamSenders和一个TRVCamReceiver,它们具有相同的标识符(TRVCamSender.GUIDFrom,TRVCamReceiver.GUIDMy; TRVCamSender.UseGUID必须为True)。 如果连接了具有相同标识符的第二个客户端,则服务器将断开第一个客户端的连接。
同一客户端中的两个发送方可能需要使用不同的协议:第一个发送方可以使用UDP发送视频和音频,第二个发送方可以使用TCP或HTTP发送命令,二进制数据和文件。 协议在TRVCamSender.Protocol中指定。 TCP或HTTP发送者必须连接到HTTPPort,UDP发送者必须连接到UDPPort。 TCP或HTTP发送者必须具有TCPConnectionType = rvtcpSenderToReceiver。
接收器始终使用TCP或HTTP连接到服务器。 它必须具有TCPConnectionType = rvtcpReceiverToSender。
端到端
如果两个客户端知道彼此的标识符,则它们可以通过服务器彼此发送数据。 可以在TRVCamSender.GUIDTo中指定其他客户端的标识符(或发送命令,文件等的方法的类似参数)。
此类通信可用于实施私人对话。
群组
在客户端之间建立通信的另一种方法是将它们添加到同一组中。
客户端可以通过调用TRVCamSender.JoinGroup将自身添加到服务器上的组中,并通过调用TRVCamSender.LeaveGroup将自身从该组中删除。
现有组成员在TRVCamReceiver.OnUserJoinsGroup和OnUserLeavesGroup中得到通知。
客户端可以通过调用TRVCamSender.GetUsersFromGroup来请求组成员的列表; 作为响应,将调用TRVCamReceiver.OnGetGroupUsers。
数据的目标组可以在TRVCamSender.GUIDTo中指定(或发送命令,文件等的方法的类似参数)。
此类通信可用于实现聊天室。
使用MaxGroupCount属性可以限制组的数量。
默认接收方
在客户端之间建立通信的另一种方法是默认接收者列表。
如果发送方没有特定的GUIDTo和GUIDGroup,则发送方中的数据将发送到默认接收方。默认接收者可以用来实现联系人列表(以及允许的发送者)。
# 13.1. 属性
属性 | 属性说明 |
---|---|
BufferOptions, TempFolder | 这些属性定义缓冲选项 |
CmdOptions | 用于处理来自客户端的命令的选项 |
FilterUserCmd | 指定系统命令是否调用OnServerCmd事件 |
HTTPActive, HTTPPort | HTTPActive打开/关闭HTTP服务器,HTTPPort定义服务器端口 |
GUIDMy | 服务器标识符 |
KeepClientInfoMode | 定义服务器如何保留有关客户端的信息 |
MaxGroupCount | 定义服务器上允许的最大群组数 |
SenderConnectionProperties, ReceiverConnectionProperties | 定义连接属性(超时时间和套接字类型) |
SessionKey | 返回当前会话的标识符 |
UDPActive, UDPPort | UDPActive打开/关闭UDP服务器,UDPPort定义服务器端口 |
# 13.1.1. BufferOptions, TempFolder 属性
property BufferOptions: TRVBufferOptions;
property TempFolder: String;
2
这些属性定义缓冲选项。
在TempFolder中创建文件缓冲区。 如果TempFolder为空,则使用临时文件的系统目录。
# 13.1.2. CmdOptions 属性
type
TRVCmdOption = (rvcpUseSystemCmd, rvcpCmdAllGroups, rvcpCmdAllUsers,
rvcpCmdAllOnline, rvcpCmdResetServer);
TRVCmdOptions = set of TRVCmdOption;
property CmdOptions: TRVCmdOptions;
2
3
4
5
用于处理来自客户端的命令的选项。
值 | 说明 |
---|---|
rvcpUseSystemCmd | 允许在服务器上处理系统命令,仅当包括rvcpUseSystemCmd时,以下所有选项才有效 |
rvcpCmdAllGroups | 允许客户端接收服务器上的组列表 |
rvcpCmdAllUsers | 允许客户端接收服务器上所有客户端的列表 |
rvcpCmdAllOnline | 允许客户端接收服务器上所有在线客户端的列表 |
rvcpCmdResetServer | 允许客户端重新启动服务器 |
# 13.1.3. FilterUserCmd 属性
property FilterUserCmd: Boolean;
指定系统命令是否调用OnServerCmd事件。
如果为True,则仅针对寻址到服务器的命令(名称以RVS_
或RVSU_
开头)调用此事件。
如果为False,则所有命令(包括用户彼此发送的命令)都会调用此事件,前提是这些命令未经压缩就发送。
# 13.1.4. GUIDMy 属性
property GUIDMy: TRVMAnsiString;
服务器标识符。
不直接使用此属性,但建议将其作为参数AGUIDFrom传递给SendCommandToGUID。
# 13.1.5. HTTPActive, HTTPPort 属性
property HTTPActive: Boolean;
property HTTPPort: Word;
2
HTTPActive打开/关闭HTTP服务器,HTTPPort定义服务器端口,HTTPPort和UDPPort必须不同。
# 13.1.6. KeepClientInfoMode 属性
type
TRVKeepClientInfoMode = (rvkclmWhileOnline, rvkclmAlways);
property KeepClientInfoMode: TRVKeepClientInfoMode;
2
3
定义服务器如何保留有关客户端的信息。
此属性指定何时在服务器上清除有关客户端的信息。
值 | 说明 |
---|---|
rvkclmWhileOnline | 客户端在线时会存储信息,断开连接时,将删除有关此客户端的所有信息。 如果在每个连接上重新生成客户端的GUID,则可以使用此模式。 |
rvkclmAlways | 即使客户端处于脱机状态(直到服务器重新启动),信息也会被存储。 如果客户端的GUID是持久的(并标识用户的个人资料),则可以使用此模式 |
# 13.1.7. MaxGroupCount 属性
property MaxGroupCount: Cardinal;
定义服务器上允许的最大群组数。
值0表示“无限制”。
建议限制组的数量,因为否则恶意客户端可能会创建新的组导致服务器内存不足。
# 13.1.8. SenderConnectionProperties, ReceiverConnectionProperties 属性
property SenderConnectionProperties: TRVConnectionProperties;
property ReceiverConnectionProperties: TRVConnectionProperties;
2
定义连接属性(超时时间和套接字类型)。
SenderConnectionProperties包含连接的发件人的属性(从客户端到服务器的数据)。
ReceiverConnectionProperties包含连接的接收者的属性(从服务器到客户端的数据)。
# 13.1.9. SessionKey 属性(只读)
property SessionKey: TRVSessionKey;
返回当前会话的标识符。
每次HTTPActive变为True时,此属性的值都会更改(增加1)。 当HTTPActive = False时,此属性返回0。
# 13.1.10. UDPActive, UDPPort 属性
property UDPActive: Boolean;
property UDPPort: Word;
2
UDPActive打开/关闭UDP服务器,UDPPort定义服务器端口。
HTTPPort和UDPPort必须不同。
# 13.2. 事件
事件 | 何时触发 |
---|---|
OnDataRead | 接收新数据时触发事件 |
OnPacketProcessing, OnConnectionCountChanged | 这些事件允许显示有关服务器状态的信息 |
OnServerCmd | 在从客户端接收命令时触发该事件 |
OnStart, OnStop, OnError | 服务器启动或停止时发生的事件 |
OnUserConnect, OnUserDisconnect | 在创建/关闭与客户端的连接时发生该事件 |
# 13.2.1. OnDataRead 事件
接收新数据时触发该事件,
这是一个低级别的事件。 它很少需要处理。
AData –收到的数据。
ADataType –数据类型; 它可以是*** _ DATA常量之一,也可以是其他值,这些值标识服务器用来维护连接的数据。
ASocket –从中读取数据的套接字。
所有GUID参数仅可用于TCP连接。 对于UDP连接,它们等于0。
GUIDFrom –数据发送者的标识符(如果有)
GUIDTo –数据接收器的标识符(如果有)
GUIDGroup –组的标识符(如果有)
在线程上下文中调用此事件。 在这种情况下,请勿更新用户界面(或进行需要主进程上下文的任何其他操作)。
# 13.2.2. OnPacketProcessing, OnConnectionCountChanged 事件
当接收或处理新数据包时,将发生OnPacketProcessing事件。 计数是累积的数据包数。
当连接计数更改时,将发生OnConnectionCountChanged。 计数是连接数(连接是TRVCamReceiver的通道)
这些事件对于显示有关服务器状态的信息很有用。 您可以指定显示服务器的繁忙程度。
# 13.2.3. OnServerCmd 事件
服务器接收到TRVCamSender.SendCmd(或某些其他发送方方法)发送的命令时,将发生此事件。
默认情况下,此事件仅由专门寻址到服务器的命令调用。这些命令的名称以“ RVS_”或“ RVSU_”为前缀。您可以设置FilterUserCmd = False来为所有命令调用此事件。
参数:
GUIDUser 是发送方的客户端标识符(TRVCamSender.GUIDFrom)
GUIDToUser 是收件人的客户端标识符(TRVCamReceiver.GUIDFrom),此参数仅对从客户端寻址到客户端的命令有效。
如果将命令发送到组,则GUIDGroup是组的标识符。
ServerCmd包含命令数据。
在线程上下文中调用此事件。在这种情况下,请勿更新用户界面(或进行需要主进程上下文的任何其他操作)。
如果在事件内执行耗时的操作,则会检查SessionKey属性是否未更改(以确保未关闭或重新打开连接)。
# 13.2.4. OnStart, OnStop, OnError 事件
服务器成功启动其工作时,将发生OnStart事件。
如果服务器无法启动,则会发生OnError事件。
服务器结束工作时会发生OnStop事件。
# 13.2.5. OnUserConnect, OnUserDisconnect 事件
当创建/关闭客户端的TRVCamReceiver的通道时,将发生事件。
GUIDUser标识客户端,它等于TRVCamReceiver.GUIDMy。
MediaType是通道的数据类型。
这些事件在线程上下文中调用。 在这些事件中,请勿更新用户界面(或进行需要主进程上下文的任何其他操作)。
# 13.3. 方法
# 13.3.1. SendCommandToGUID 方法
function SendCommandToGUID(Cmd: TRVCmd; AGUIDFrom, AGUIDTo, AGUIDGroup: TGUID): Boolean;
将命令发送到AGUIDTo参数中指定的客户端。
参数
- Cmd是要发送的命令。 调用此方法后,请自己释放该对象。
- AGUIDFrom必须等于服务器的GUIDMy属性(除非您要模拟来自另一个客户端的命令)。
- AGUIDTo标识收件人(客户端接收方的GUIDMy属性)
- AGUIDGroup可用于模拟发送给一组用户的命令。
返回值 如果无法发送命令(例如,未连接此用户),则为False,否则为True。
# 14. TRVTrafficMeter 组件
TRVTrafficMeter显示摄像机,接收器和发送器的流量,该组件可用于调试或查找最佳设置。
该组件显示相机、发送器、接收器的图标和摘要。
例子
- 发件人从摄像机获取数据并将其发送到网络; 您可以比较从摄像机接收并由发送方发送的数据量。 流量差异可能是由于以下原因:压缩,减小的帧尺寸,丢失的帧(如果发送方太忙,发送方可能会跳过帧)。
- 发送方将数据发送到网络,接收方接收数据; UDP或TRVMediaServer连接。 您可以查看已接收(丢失)了多少数据,并估算了带宽。
# 14.1. 属性
属性 | 属性说明 |
---|---|
Camera | 指定要显示其网络流量的摄像机 |
Language | 指定用户界面的语言 |
Receiver | 指定要显示其网络流量的接收者 |
Sender | 指定发送方以显示其网络流量 |
# 15. TFSPlayer组件
该组件用作播放控制,需要使用TPanel等组件来作为屏幕播放展示。
# 15.1. 属性
属性 | 属性说明 |
---|---|
AspectRatio | 设置视频的宽高比 |
AudioDriver | 设置视频播放所使用的音频驱动 |
AudioHook | 设置音频钩子 |
AudioVolume | 设置音频音量,取值范围为0-128 |
Brightness | 设置视频亮度 |
DisableAudio | 禁用音频 |
DisableVideo | 禁用视频 |
ExternalSubtitle | 是否启用外挂字幕 |
FrameHook | 是否设置帧钩子 |
FullScreen | 是否设置全屏 |
Hue | 设置色相 |
Mute | 是否开启静音 |
Saturation | 设置饱和度 |
VideoDriver | 设置视频播放所使用的视频驱动 |
VideoHook | 是否设置视频钩子 |
VideoPanel | 设置视频显示画面使用的控件,通常可使用TPanel作为播放视频使用的背景 |
VerticalFlip | 设置是否对视频进行垂直翻转操作 |
WaterMark | 设置水印 |
# 15.1.1. AspectRatio
property AspectRatio:Double;
设置视频的宽高比。
取值 | 说明 |
---|---|
=0 | 保持源视频的宽高比 |
<0 | 视频会进行拉伸以适应播放控件的宽高比 |
>0 | 自定义的宽高比值,比如4/3,16/9,1.85/1,2.35/1 |
# 15.2. 方法
# 15.2.1. InitSDL
function InitSDL: Boolean;
该方法用于检查播放控件是否已进行初始化操作。
if FThis.FSPlayer1.InitSDL then
begin
// 在InitSDL后获取音频设备列表
FThis.cboAudioDevice.Items.Assign(FThis.FSPlayer1.AudioDevices);
if FThis.cboAudioDevice.Items.Count > 0 then
FThis.cboAudioDevice.ItemIndex := 0;
end;
2
3
4
5
6
7
# 15.2.2. Open
procedure Open(QUrl: UniCodeString; QPaused: Boolean);
用于打开指定文件地址的视频。该地址可以是网络地址也可以是本地的目录地址。支持的类型包括RTSP、RTMP、HTTP、FTP以及本地地址。
//播放本地视频文件,使用打开文件对话框来获取视频文件地址
if FThis.OpenDialog1.Execute(0) then
begin
FThis.FSPlayer1.Open(FThis.OpenDialog1.FileName,false);
end;
//播放网络地址文件
FThis.FSPlayer1.Open('http://example.com/sample.mp4',false);
//播放网络串流视频
FThis.FSPlayer1.Open('http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8',false);
2
3
4
5
6
7
8
9
10
11
# 15.2.3. TogglePause
procedure TogglePause;
暂停视频的播放。
# 15.2.4. StepToNextFrame
procedure StepToNextFrame;
在视频暂停的情况下,使用该方法可使视频显示下一帧的画面。
# 15.2.5. Stop
procedure Stop(AwaitForStop: Boolean);
调用该方法后,播放器将停止视频的播放,其中可指定是否等待控件进行停止播放的操作。
FThis.FSPlayer1.Stop(true);
# 15.2.6. Capture
procedure Capture;
调用该方法后,进行视频截图操作。截图后将打开资源管理器选择截图的地址。
# 15.2.7. ShowMsgLog
procedure ShowMsgLog(AShow: Boolean);
调用该方法后,显示日志对话框,该方法通常用于调试。
FThis.FsPlayer1.ShowMsgLog(FThis.chkMsgLog.Checked);
# 16. TFSEnCoder组件
该组件是视频编码组件,通过该组件可实现视频的编码,可用作视频的转码,流媒体视频的录制。
# 16.1. 属性
属性 | 属性说明 |
---|---|
AudioDevice | 设置视频录制所使用的音频设备名称,在设计阶段自动生成 |
DeviceType | 设置录制视频的来源 |
InFileName | 输入的文件的名称 |
InputOptions | 设置输入选项 |
OutFileName | 设置输出文件的地址 |
OutputOptions | 设置输出的相关选项 |
PreviewAudio | 是否设置预览音频 |
PreviewBitmap | 是否设置预览图片 |
PreviewInterval | 设置预览点的时间间隔 |
PreviewVideo | 是否设置预览视频 |
ProgressInterval | 设置进度条的时间间隔 |
PushFlow | 是否进行推流操作 |
ThreadPriority | 设置线程的优先级 |
TriggerEventInMainThread | 是否设置主线程的触发器事件 |
VideoDevice | 设置视频设备的名称 |
# 16.1.1. DeviceType
property DeviceType: TDeviceType;
设置录制视频的来源。
名称 | 说明 |
---|---|
dtCamera | 相机作为视频来源 |
dtDesktop | 将桌面作为视频来源 |
dtFile | 将视频文件作为视频来源 |
dtWeb | 将网络视频地址作为视频来源 |
# 16.1.2. InFileName
property InFileName: String;
设置输入的文件、流的地址。
# 16.1.3. InputOptions
property InputOptions: TStrings;
设置输入选项,该选项已随DeviceType
属性进行默认配置,通常不需要进行更改。
# 16.1.4. OutFileName
property OutFileName: String;
设置输出的文件或者流的地址,如果PushFlow
选项为True
,则该项中填写直播流的地址。
# 16.1.5. OutputOptions
property OutputOptions: TStrings;
设置输出选项,该选项已随DeviceType
属性进行默认配置,通常不需要进行更改。
双击该控件,打开输出选项设置界面,可以自行选择输出的视频编码类型以及格式信息,点击确定后在OutputOptions
属性中生成对应的样式参数文本。

# 16.2. 方法
# 16.2.1. Load
procedure Load;
调用该方法加载视频文件,加载日志会提供在Log
属性中。加载完成后,会有提示是否加载成功。
# 16.2.2. Start
procedure Start(AThreadCount: Integer);
指定视频编码时程序使用的线程数量,开始进行视频编码。
# 16.2.3. Pause
procedure Pause;
调用该方法,暂停视频编码。
# 16.2.4. Resume
procedure Resume;
调用该方法,恢复视频编码。
# 16.2.5. Stop
procedure Stop;
调用该方法,停止视频编码。
# 17. TChrome 组件
此控件为一个不带UI界面的浏览器,可通过脚本向其中输入URL地址信息来进行页面载入。
# 17.1. 方法
# 17.1.1. CreateBrowswer
function CreateBrowser: Boolean;
此方法用于在界面中创建一个浏览器实例。
# 17.1.2. Init
procedure Init;
初始化浏览器。
# 17.1.3. URL
procedure URL(AUrl: String);
此方法可用于打开指定URL的网页界面。