監控視訊控制元件
# 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連線
TRVCamSender.Protocol設定為rvpUDP,並且指定TRVCamSender的ReceiverHost:ReceiverPort。
連線到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的網頁界面。