Menu Close

Streaming to social media network

Skip to main content
< Back
You are here:
Print

Streaming to social media network

Sample code to stream an IP camera or the desktop to a social media network (e.g. Facebook Live).

Requires the Datastead RTSP/RTMP/HTTP/ONVIF Source for the camera capture and the Datastead Multipurpose Encoder for the streaming. Replace the RTSP URL and YOUR-STREAM-KEY with your own values; set StreamDesktop to switch between the screen and the IP camera as source.

Delphi

unit Unit1;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.StdCtrls,
  // Add any other required units here, for example the unit that contains VidGrab definitions
  VidGrab;

type
  TForm1 = class(TForm)
    btnPlay: TButton;
    VideoGrabber1: TVideoGrabber;  // Adjust the component type as needed
    procedure btnPlayClick(Sender: TObject);
  private
    { Private declarations }
    StreamingEncoderId: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnPlayClick(Sender: TObject);
var
  StreamDesktop: Boolean;
begin
  // Set your own RTSP URL and Facebook key here
  // Enable/disable StreamDesktop to switch between screen and IP camera as source
  StreamDesktop := True;

  if StreamDesktop then
  begin
    VideoGrabber1.VideoSource := VidGrab.TVideoSource.vs_ScreenRecording;
    VideoGrabber1.UseNearestVideoSize(1920, 1080, True);
  end
  else
  begin
    VideoGrabber1.VideoSource := VidGrab.TVideoSource.vs_IPCamera;
    VideoGrabber1.IPCameraURL := 'rtsp://... your URL ';
  end;

  VideoGrabber1.AudioSource := VidGrab.TAudioSource.as_Silent;

  StreamingEncoderId :=
    VideoGrabber1.Encoders_CreateInstanceForStreaming(
      'rtmps://live-api-s.facebook.com:443/rtmp/YOUR-STREAM-KEY');

  if StreamingEncoderId = -1 then
  begin
    // Handle error here
  end
  else
  begin
    VideoGrabber1.Encoder_SetStr(StreamingEncoderId,
      VidGrab.TEncoder_str.Enc_Video_Codec, 'h264');
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_Video_Enabled_bool, 1);
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_Audio_Enabled_bool, 1);
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_Video_BitRate_kb, 2500);
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_Video_rc_MaxBitRate_kb, 2500);
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_Video_rc_BufferSize_kb, 5000);
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_Video_IDR_Interval, 50);
    VideoGrabber1.Encoder_SetInt(StreamingEncoderId,
      VidGrab.TEncoder_int.Enc_IsActive_bool, 1);

    VideoGrabber1.StartPreview;
  end;
end;

end.

C#

// Set your own RTSP URL and Facebook key
// Enable/disable StreamDesktop to switch between screen and IP camera as source

private int StreamingEncoderId = -1;

private void btnPlay_Click(object sender, EventArgs e)
{
    bool StreamDesktop = true;

    if (StreamDesktop)
    {
        VideoGrabber1.VideoSource = VidGrab.TVideoSource.vs_ScreenRecording;
        VideoGrabber1.UseNearestVideoSize(1920, 1080, true);
    }
    else
    {
        VideoGrabber1.VideoSource = VidGrab.TVideoSource.vs_IPCamera;
        VideoGrabber1.IPCameraURL = "rtsp://... your URL ";
    }

    VideoGrabber1.AudioSource = VidGrab.TAudioSource.as_Silent;

    StreamingEncoderId = VideoGrabber1.Encoders_CreateInstanceForStreaming(
        "rtmps://live-api-s.facebook.com:443/rtmp/YOUR-STREAM-KEY");

    if (StreamingEncoderId == -1)
    {
        // Handle error
    }
    else
    {
        VideoGrabber1.Encoder_SetStr(StreamingEncoderId, 
                                     VidGrab.TEncoder_str.Enc_Video_Codec, 
                                     "h264");
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_Video_Enabled_bool, 
                                     1);
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_Audio_Enabled_bool, 
                                     1);
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_Video_BitRate_kb, 
                                     2500);
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_Video_rc_MaxBitRate_kb, 
                                     2500);
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_Video_rc_BufferSize_kb, 
                                     5000);
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_Video_IDR_Interval, 
                                     50);
        VideoGrabber1.Encoder_SetInt(StreamingEncoderId, 
                                     VidGrab.TEncoder_int.Enc_IsActive_bool, 
                                     1);

        VideoGrabber1.StartPreview();
    }
}

VB

' set your own RTSP URL and facebook key
	' enable/disable StreamDesktop to switch between screen and IP camera as source

    Dim StreamingEncoderId As Integer = -1

    Private Sub btnPlay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPlay.Click

        Dim StreamDesktop As Boolean = True

        If StreamDesktop Then
            VideoGrabber1.VideoSource = VidGrab.TVideoSource.vs_ScreenRecording
            VideoGrabber1.UseNearestVideoSize(1920, 1080, True)
        Else
            VideoGrabber1.VideoSource = VidGrab.TVideoSource.vs_IPCamera
            VideoGrabber1.IPCameraURL = "rtsp://... your URL "
        End If
        VideoGrabber1.AudioSource = VidGrab.TAudioSource.as_Silent

        StreamingEncoderId = VideoGrabber1.Encoders_CreateInstanceForStreaming("rtmps://live-api-s.facebook.com:443/rtmp/YOUR-STREAM-KEY")
        If (StreamingEncoderId = -1) Then
            ' error
        Else
            VideoGrabber1.Encoder_SetStr(StreamingEncoderId, VidGrab.TEncoder_str.Enc_Video_Codec, "h264")
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_Video_Enabled_bool, 1)
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_Audio_Enabled_bool, 1)
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_Video_BitRate_kb, 2500)
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_Video_rc_MaxBitRate_kb, 2500)
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_Video_rc_BufferSize_kb, 5000)
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_Video_IDR_Interval, 50)
            VideoGrabber1.Encoder_SetInt(StreamingEncoderId, VidGrab.TEncoder_int.Enc_IsActive_bool, 1)
            VideoGrabber1.StartPreview()
        End If
    End Sub
Table of Contents