Synchronous vs asynchronous connection
TVideoGrabber can connect to IP cameras and URLs:
-
synchronously if OpenURLAsync is disabled
In this case when invoking StartPreview() or StartRecording(), the function blocks until the connection succeeds or fails. -
asynchronously if OpenURLAsync is enabled (default)
In this case, when invoking StartPreview() or StartRecording(), the function returns immediately so the main thread is not blocked and the application continues to respond to key and mouse events.
Once the connection is completed, the OnPreviewStarted() or OnRecordingStarted() event occurs to notify the application that the component is running.
If the connection fails, the OnLog event occurs with an "e_failed_to_start_preview" or "e_failed_to_start_recording" LogType error.
Example of generic StartPreview() / StartRecording() set of functions that handles the asynchronous connection result through the OnPreviewStarted() / OnRecordingStarted() and OnLog() events (pseudo-code):
function StartPreview()
{
VideoGrabber.OpenURLAsync = true // default
VideoGrabber.VideoSource = vs_IPCamera
VideoGrabber.IPCameraURL = "rtsp://192.168.0.25/axis-media/media.amp?videocodec=h264"
VideoGrabber.SetAuthentication (at_IPCamera, "root", "admin")
VideoGrabber.StartPreview ()
}
function StartRecord()
{
VideoGrabber.OpenURLAsync = true // default
VideoGrabber.VideoSource = vs_IPCamera
VideoGrabber.IPCameraURL = "rtsp://192.168.0.25/axis-media/media.amp?videocodec=h264&audio=1"
VideoGrabber.SetAuthentication (at_IPCamera, "root", "admin")
VideoGrabber.RecordingInNativeFormat = true
VideoGrabber.RecordingMethod = rm_MP4
VideoGrabber.AudioRecording = true
VideoGrabber.StartRecording ()
}
event function OnRecordingStartedEvent(Sender, Filename)
{
ShowMessage (Filename + " recording started!")
}
event function OnPreviewStartedEvent(Sender)
{
ShowMessage ("preview started!")
}
event function OnLogEvent(Sender, LogType, Severity, ErrorMsg)
{
if (LogType = e_failed_to_start_recording) {
ShowMessage ("error: recording failed to start")
}
else if (LogType = e_failed_to_start_preview) {
ShowMessage ("error: preview failed to start")
}
}