📄 mainform.pas
字号:
end;
procedure TfrmMainForm.btnDeviceDialogClick(Sender: TObject);
begin
VideoGrabber.ShowDialog (dlg_VideoDevice);
RefreshDeviceControls;
end;
procedure TfrmMainForm.btnCameraControlDialogClick(Sender: TObject);
begin
ShowFormAboveVideo (frmCameraControl);
end;
procedure TfrmMainForm.btnVideoQualityDialogClick(Sender: TObject);
begin
ShowFormAboveVideo (frmVideoQuality);
end;
procedure TfrmMainForm.btnVideoControlDialogClick(Sender: TObject);
begin
ShowFormAboveVideo (frmVideoControl);
end;
procedure TfrmMainForm.btnSpecialControlsClick(Sender: TObject);
begin
ShowFormAboveVideo (frmSpecialControls);
end;
procedure TfrmMainForm.btnStreamDialogClick(Sender: TObject);
begin
// WARNING: USUALLY, THIS DIALOG ALLOWS TO CHANGE ONLY 1 PARAMETER AT THE SAME TIME
VideoGrabber.ShowDialog (dlg_StreamConfig);
VideoGrabberVideoDeviceSelected (Self); // to refresh the controls, if required
end;
procedure TfrmMainForm.rdgPreferredVideoSizeClick(Sender: TObject);
begin
case rdgPreferredVideoSize.ItemIndex of
0: VideoGrabber.UseNearestVideoSize (0, 0, chkStretchPreferredVideoSize.Checked); // disables the nearest size feature, uses the device's VideoSize index in the VideoSizes list
1: VideoGrabber.UseNearestVideoSize ( 88, 60, chkStretchPreferredVideoSize.Checked);
2: VideoGrabber.UseNearestVideoSize ( 88, 72, chkStretchPreferredVideoSize.Checked);
3: VideoGrabber.UseNearestVideoSize (180, 120, chkStretchPreferredVideoSize.Checked);
4: VideoGrabber.UseNearestVideoSize (180, 144, chkStretchPreferredVideoSize.Checked);
5: VideoGrabber.UseNearestVideoSize (320, 240, chkStretchPreferredVideoSize.Checked);
6: VideoGrabber.UseNearestVideoSize (352, 288, chkStretchPreferredVideoSize.Checked);
7: VideoGrabber.UseNearestVideoSize (640, 480, chkStretchPreferredVideoSize.Checked);
8: VideoGrabber.UseNearestVideoSize (720, 480, chkStretchPreferredVideoSize.Checked);
9: VideoGrabber.UseNearestVideoSize (720, 576, chkStretchPreferredVideoSize.Checked);
10: VideoGrabber.UseNearestVideoSize (768, 576, chkStretchPreferredVideoSize.Checked);
// you can add your own preferred formats
end;
cboVideoSizes.Enabled := rdgPreferredVideoSize.ItemIndex = 0;
end;
procedure TfrmMainForm.chkStretchPreferredVideoSizeClick(Sender: TObject);
begin
rdgPreferredVideoSizeClick (Self);
end;
procedure TfrmMainForm.btnFrameRateClick(Sender: TObject);
var
Value: Double;
begin
Value := StrToFloatDef (edtFrameRate.Text, -1);
VideoGrabber.FrameRate := Value;
if VideoGrabber.CurrentState = cs_Preview then begin
mmoLog.lines.Add ('current frame rate: ' + FormatFloat ('0.00', VideoGrabber.CurrentFrameRate) + ' fps.');
end;
end;
procedure TfrmMainForm.btnAboutFrameRateClick(Sender: TObject);
begin
ShowMessage ('0 means that the default frame rate of the device will be used.' + #13#10 + 'After the OnPreviewStarted or OnRecordingStarted event occurs,' + #13#10 + 'its value is available in the CurrentFrameRate property.');
end;
procedure TfrmMainForm.btnSelectFileOrUrlClick(Sender: TObject);
begin
dlgOpen.FileName := OPEN_MEDIA_FILES;
if dlgOpen.Execute then begin
edtVideoSourceFileOrUrl.Text := dlgOpen.FileName;
end;
end;
procedure TfrmMainForm.edtVideoSourceFileOrUrlChange(Sender: TObject);
begin
VideoGrabber.VideoSource_FileOrUrl := edtVideoSourceFileOrUrl.Text;
end;
procedure TfrmMainForm.VideoSourceFileOrUrl_UserNameChange(Sender: TObject);
begin
VideoGrabber.SetAuthentication (at_StreamingUrl, VideoSourceFileOrUrl_UserName.Text, VideoSourceFileOrUrl_Password.Text);
end;
procedure TfrmMainForm.VideoSourceFileOrUrl_PasswordChange(Sender: TObject);
begin
VideoGrabber.SetAuthentication (at_StreamingUrl, VideoSourceFileOrUrl_UserName.Text, VideoSourceFileOrUrl_Password.Text);
end;
procedure TfrmMainForm.btnDemoURLClick(Sender: TObject);
begin
ShellExecute(0, 'open', PChar('http://www.datastead.com/demo/StreamingURL.htm'), '', '', SW_SHOW);
end;
procedure TfrmMainForm.btnUrlConfClick(Sender: TObject);
begin
VideoGrabber.ShowDialog (dlg_NetShowConfig);
end;
procedure TfrmMainForm.btnScreenRecordingWindowClick(Sender: TObject);
begin
VideoGrabber.SetWindowRecordingByName (edtScreenRecordingWindow.Text, false); // set to "true" for an exact and case-sensitive match
end;
procedure TfrmMainForm.chkScreenRecordingWithCursorClick(Sender: TObject);
begin
VideoGrabber.ScreenRecordingWithCursor := chkScreenRecordingWithCursor.Checked;
end;
procedure TfrmMainForm.edtMonitorNumberChange(Sender: TObject);
begin
VideoGrabber.ScreenRecordingMonitor := StrToIntDef (edtMonitorNumber.Text, 0);
end;
procedure TfrmMainForm.btnMonitorNumberInfoClick(Sender: TObject);
begin
ShowMessage ('-1 = full desktop, 0 = 1st monitor, 1 = 2nd monitor, etc...');
end;
procedure TfrmMainForm.chkMultiplexedAutoSwitchClick(Sender: TObject);
begin
if chkMultiplexedAutoSwitch.Checked then begin
VideoGrabber.MultiplexedRole := mr_MultiplexedMosaic4;
end
else begin
VideoGrabber.MultiplexedRole := mr_NotMultiplexed;
end;
end;
procedure TfrmMainForm.chkMultiplexedInputEmulationClick(Sender: TObject);
begin
VideoGrabber.MultiplexedInputEmulation := chkMultiplexedInputEmulation.Checked;
end;
procedure TfrmMainForm.chkReduceDVFrameRateClick(Sender: TObject);
begin
VideoGrabber.DVReduceFrameRate := chkReduceDVFrameRate.Checked;
end;
procedure TfrmMainForm.VideoGrabberPreviewStarted(Sender: TObject);
begin
mmoLog.lines.Add ('');
mmoLog.lines.Add ('video size: ' + IntToStr (VideoGrabber.VideoWidth) + 'x' + IntToStr (VideoGrabber.VideoHeight));
mmoLog.lines.Add ('display size: ' + IntToStr (VideoGrabber.Display_VideoWidth) + 'x' + IntToStr (VideoGrabber.Display_VideoHeight));
mmoLog.lines.Add ('current frame rate: ' + FormatFloat ('0.00', VideoGrabber.CurrentFrameRate) + ' fps.');
mmoLog.lines.Add ('');
end;
procedure TfrmMainForm.VideoGrabberFrameProgress(Sender: TObject;
FrameNumber: Cardinal; FrameTime: Int64; FrameId: Integer);
var
DVTimeCode: String;
DVDateTime: String;
begin
edtFrameCount.Text := 'frame: ' + IntToStr (FrameNumber)
+ ' dropped:' + IntToStr (VideoGrabber.GetFrameInfo (FrameId, fi_DroppedFrameCount))
+ ' time:' + Format ('%.2d:%.2d:%.2d %.2d', [VideoGrabber.GetFrameInfo (FrameId, fi_SampleTime_Hour),
VideoGrabber.GetFrameInfo (FrameId, fi_SampleTime_Min),
VideoGrabber.GetFrameInfo (FrameId, fi_SampleTime_Sec),
VideoGrabber.GetFrameInfo (FrameId, fi_SampleTime_Hs)]);
if VideoGrabber.GetFrameInfo (FrameId, fi_DVTimeCode_IsAvailable) > 0 then begin // not available if 0
DVTimeCode := Format ('tc: %.2d:%.2d:%.2d %.2d',
[VideoGrabber.GetFrameInfo (FrameId, fi_DVTimeCode_Hour),
VideoGrabber.GetFrameInfo (FrameId, fi_DVTimeCode_Min),
VideoGrabber.GetFrameInfo (FrameId, fi_DVTimeCode_Sec),
VideoGrabber.GetFrameInfo (FrameId, fi_DVTimeCode_Ff)]);
end
else begin
DVTimeCode := '';
end;
if VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_IsAvailable) > 0 then begin // not available if 0
DVDateTime := Format ('dv date: %.2d/%.2d/%.2d %.2d:%.2d:%.2d',
[VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_Day),
VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_Month),
VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_Year),
VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_Hour),
VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_Min),
VideoGrabber.GetFrameInfo (FrameId, fi_DVDateTime_Sec)]);
end
else begin
DVDateTime := '';
end;
edtDVDateTime.Text := DVTimeCode + ' ' + DVDateTime;
end;
////////////////////////////////////////////////////////////////////////////////
// AUDIO TAB
////////////////////////////////////////////////////////////////////////////////
procedure TfrmMainForm.VideoGrabberAudioDeviceSelected(Sender: TObject);
begin
// from this event set the parameters that change when the current audio capture device change
cboAudioDevices.ItemIndex := VideoGrabber.AudioDevice; // be sure the listbox index matches the current index value
AssignListToComboBox (cboAudioInputs, VideoGrabber.AudioInputs, integer (VideoGrabber.AudioInput));
tbrAudioInputLevel.Position := VideoGrabber.AudioInputLevel;
tbrAudioInputBalance.Position := VideoGrabber.AudioInputBalance;
chkAudioInputMono.Checked := VideoGrabber.AudioInputMono;
end;
procedure TfrmMainForm.btnStartAudioRenderingClick(Sender: TObject);
begin
VideoGrabber.StartAudioRendering;
if not VideoGrabber.AudioDeviceRendering then begin
if btnStartAudioRendering.Tag = 0 then begin
btnStartAudioRendering.Tag := 1; // to show the popup only one time
ShowMessage ('StartAudioRendering acts as "preview", e.g. for the VU-Meters, if AudioDeviceRendering (on the left) is not enabled, the audio will not be heard in the speakers');
end;
end;
end;
procedure TfrmMainForm.btnStartWAVRecordingClick(Sender: TObject);
begin
VideoGrabber.CompressionMode := cm_NoCompression;
VideoGrabber.RecordingMethod := rm_AVI;
VideoGrabber.StartAudioRecording;
end;
procedure TfrmMainForm.btnStartMP3RecordingClick(Sender: TObject);
begin
VideoGrabber.CompressionMode := cm_CompressOnTheFly;
VideoGrabber.CompressionType := ct_Audio;
VideoGrabber.RecordingMethod := rm_AVI;
VideoGrabber.AudioCompressor := VideoGrabber.FindIndexInListByName (VideoGrabber.AudioCompressors, 'LAME Audio Encoder', false, true);
if VideoGrabber.AudioCompressor = -1 then begin
showmessage ('The LAME Audio Encoder is required, download it from http://www.elecard.com/download/');
end
else begin
VideoGrabber.StartAudioRecording;
end;
end;
procedure TfrmMainForm.btnStartASFRecordingClick(Sender: TObject);
begin
VideoGrabber.CompressionMode := cm_NoCompression;
VideoGrabber.RecordingMethod := rm_ASF;
VideoGrabber.StartAudioRecording;
end;
procedure TfrmMainForm.btnStopAudioClick(Sender: TObject);
begin
VideoGrabber.Stop;
end;
procedure TfrmMainForm.chkUseAudioOfVideoCaptureDeviceClick(
Sender: TObject);
begin
if chkUseAudioOfVideoCaptureDevice.Checked then begin
VideoGrabber.VideoDevice := 0; // in this demo, by default we choose the 1st
end
else begin
VideoGrabber.VideoDevice := -1; // this deactivates the video capture device
end;
end;
procedure TfrmMainForm.chkRenderAudioDeviceClick(Sender: TObject);
begin
VideoGrabber.AudioDeviceRendering := chkRenderAudioDevice.Checked;
end;
procedure TfrmMainForm.cboAudioDevicesChange(Sender: TObject);
begin
VideoGrabber.AudioDevice := cboAudioDevices.ItemIndex;
end;
procedure TfrmMainForm.btnDlgAudioDeviceClick(Sender: TObject);
begin
VideoGrabber.ShowDialog (dlg_AudioDevice);
end;
procedure TfrmMainForm.cboAudioInputsChange(Sender: TObject);
begin
VideoGrabber.AudioInput := cboAudioInputs.ItemIndex;
end;
procedure TfrmMainForm.tbrAudioInputLevelChange(Sender: TObject);
begin
VideoGrabber.AudioInputLevel := tbrAudioInputLevel.Position;
end;
procedure TfrmMainForm.tbrAudioInputBalanceChange(Sender: TObject);
begin
VideoGrabber.AudioInputBalance := tbrAudioInputBalance.Position;
end;
procedure TfrmMainForm.chkAudioInputMonoClick(Sender: TObject);
begin
VideoGrabber.AudioInputMono := chkAudioInputMono.Checked;
end;
procedure TfrmMainForm.cboAudioRenderersChange(Sender: TObject);
begin
VideoGrabber.AudioRenderer := cboAudioR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -