Streaming through the Datastead Encoder
Streaming through the Datastead Encoder
Declaration
procedure TfrmMainForm.btnMultipurposeUDPStreamingClick(Sender: TObject);
begin
if FMultipurposeUDPStreamingID=-1 then begin
FMultipurposeUDPStreamingID := VideoGrabber.Encoders_CreateInstanceForStreaming ('udp://239.255.0.1:10124');
end;
if FMultipurposeUDPStreamingID > -1 then begin
/// uncomment one of the lines below to use a specific codec, e.g.:
//VideoGrabber.Encoder_SetStr (FMultipurposeUDPStreamingID, Enc_Video_Codec, 'hevc');
//VideoGrabber.Encoder_SetStr (FMultipurposeUDPStreamingID, Enc_Video_Codec, 'h264');
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Video_Enabled_bool, 1);
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Audio_Enabled_bool, 1);
if not chkStreamingVideoEnabled.Checked then begin
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Video_Enabled_bool, 0);
end;
if not chkStreamingAudioEnabled.Checked then begin
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Audio_Enabled_bool, 0);
end;
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Video_BitRate_kb, 2000);
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Video_rc_MinBitRate_kb, 1800);
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Video_rc_MaxBitRate_kb, 2200);
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_Video_IDR_Interval, 30);
/// uncomment to enable the GPU encoder, if available for h264 or hevc
// VideoGrabber.Encoder_SetInt (FStreamingEncoderId, Enc_Video_GPU_Encoder, LongInt (Enc_GPU_Auto)); // or specify directly Enc_GPU_Intel_QSV, Enc_GPU_NVidia_NVENC or Enc_GPU_AMD_AMF
VideoGrabber.Encoder_SetInt (FMultipurposeUDPStreamingID, Enc_IsActive_bool, 1);
end;
VideoGrabber.VideoSource := vs_ScreenRecording;
VideoGrabber.UseNearestVideoSize (1920, 1080, true);
VideoGrabber.StartPreview();
end;
private void btnMultipurposeUDPStreaming_Click(object sender, EventArgs e)
if (m_MultipurposeUDPStreamingID == -1)
m_MultipurposeUDPStreamingID=VideoGrabber.Encoders_CreateInstanceForStreaming("udp://239.255.0.1:10124");
if (m_MultipurposeUDPStreamingID > -1)
/// uncomment one of the lines below to use a specific codec, e.g.:
//VideoGrabber.Encoder_SetStr (FMultipurposeUDPStreamingID, TEncoder_str.Enc_Video_Codec, "hevc");
//VideoGrabber.Encoder_SetStr (FMultipurposeUDPStreamingID, TEncoder_str.Enc_Video_Codec, "h264");
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Video_Enabled, 1);
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Audio_Enabled, 1);
if (! chkVideoStreamingEnabled.Checked)
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Video_Enabled, 0);
if (!chkAudioStreamingEnabled.Checked)
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Audio_Enabled, 0);
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Video_BitRate_kb, 2000);
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Video_rc_MinBitRate_kb, 1800);
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Video_rc_MaxBitRate_kb, 2200);
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_Video_IDR_Interval, 30);
/// uncomment to enable the GPU encoder, if (available for h264 or hevc
// VideoGrabber.Encoder_SetInt (FStreamingEncoderId, TEncoder_int.Enc_Video_GPU_Encoder, LongInt (TEncoder_int.Enc_GPU_Auto)); // or specify directly Enc_GPU_Intel_QSV, Enc_GPU_NVidia_NVENC or Enc_GPU_AMD_AMF
VideoGrabber.Encoder_SetInt(m_MultipurposeUDPStreamingID, TEncoder_int.Enc_IsActive_bool, 1);
VideoGrabber.VideoSource=vs_ScreenRecording;
VideoGrabber.UseNearestVideoSize (1920, 1080, true);
VideoGrabber.StartPreview();
Description
Creating and configuring an instance
To create an instance that will stream to the network, invoke Encoders_CreateInstanceForStreaming
The function return an unique ID that is attribued when creating the instance.
To configure then encoder, this ID must be passed to Encoder_SetStr and Encoder_SetInt.
While the video is running:
- the instance can be paused with Encoder_Pause and resumed with Encoder_Resume
Once the video is stopped (VideoGrabber.Stop()):
- an encoder instance can be removed by invoking Encoders_RemoveInstance, otherwise it will be active again when restarting the video.
- to remove all the encoders instances associated with a TVideoGrabber component invoke Encoders_RemoveAllInstances
See Also
TNetworkStreamingType TOnClientConnection TNetworkStreaming TOnDirectNetworkStreamingHostUrl ASFAudioBitRate ASFAudioChannels ASFDeinterlaceMode ASFFixedFrameRate ASFMediaServerPublishingPoint ASFMediaServerRemovePublishingPointAfterDisconnect ASFMediaServerTemplatePublishingPoint ASFNetworkMaxUsers ASFNetworkPort ASFProfile ASFProfileFromCustomFile ASFProfiles ASFProfilesCount ASFProfileVersion ASFVideoBitRate ASFVideoFrameRate ASFVideoHeight ASFVideoMaxKeyFrameSpacing ASFVideoQuality ASFVideoWidth NetworkStreaming NetworkStreamingType OnAuthenticationNeeded OnClientConnection OnDirectNetworkStreamingHostUrl ShowDialog StartAudioRendering StreamingURL