Skip to main content

Usage Guide

This page walks through using the EZInfiniteYTLive GUI to start a 24/7 looping stream.

The main window​

The application window exposes the following controls (see Form1.Designer.cs for the exact layout):

ControlName in codePurpose
RTMP URL textboxRMTPUrlBase RTMP server URL. Defaults to rtmp://a.rtmp.youtube.com/live2 (YouTube's standard ingest endpoint).
Stream Key textboxStreamKeyYour stream key for the destination service (masked with * since it's a secret).
"Choose Videos" buttonChooseVideosButtonOpens a folder picker to select the directory containing your video files.
"START" buttonStartButtonBegins streaming the chosen folder in a loop.
"STOP" buttonForceStopButtonImmediately stops streaming and kills the running FFmpeg process.
"RandOrder?" radioShuffleRadioSelects shuffle/random playback order.
"AlphabeticOrder?" radioAlphabeticOrderRadioSelects alphabetic playback order (checked by default).
Status labelStatusLabelShows the current status (Idle, Selected: <path>, Streaming..., Error: ..., Stopped).

Step-by-step​

1. Choose your videos​

Click Choose Videos and select a folder that contains at least one video file with one of the following extensions (defined in VideoStreamer.cs); the folder can contain any mix of them:

.mp4 .mkv .avi .mov .flv

The status label updates to show the selected path, e.g. Selected: C:\Videos\LoopFolder.

note

If the selected folder contains no supported files, the worker reports that condition in the status label and keeps checking. Add a supported video to the selected folder or one of its subfolders and it will be picked up without restarting the stream.

tip

Files are matched by extension throughout the selected folder and all of its subfolders. Adding or removing files while streaming takes effect on the next playlist pass.

2. Pick a playback order​

  • AlphabeticOrder? (default) — files are streamed in ascending alphabetical order by filename, then wraps back to the first file.
  • RandOrder? — enables shuffle mode.
note

RandOrder? uses a Fisher-Yates shuffle for each complete playlist pass. AlphabeticOrder? sorts each pass by filename.

3. Enter your RTMP URL and stream key​

  • RTMP URL: the ingest server address. For YouTube Live this is pre-filled as rtmp://a.rtmp.youtube.com/live2. For other platforms (Twitch, Kick, a self-hosted nginx-rtmp server, etc.), replace it with that platform's RTMP ingest URL.
  • Stream Key: the secret key issued by your streaming platform for your channel/stream. Treat this like a password — anyone with it can stream to your channel.

The app concatenates these into a single RTMP target: "<RTMP URL>/<Stream Key>" (adding a / only if the URL doesn't already end with one).

4. Start streaming​

Click START. The app:

  1. Validates that a folder was selected and that it still exists.
  2. Validates that both the RTMP URL and stream key are non-empty.
  3. Validates and resolves FFmpeg from its configured path or the system PATH.
  4. Builds the full RTMP destination URL.
  5. Creates a VideoStreamer with the selected playback order and calls StartStreaming(), which spins up a background thread that runs FFmpeg against each video file in sequence.
  6. Updates the window title and status label to Streaming..., disables START, and enables STOP. FFmpeg or folder errors are reported in the status label.

5. Stop streaming​

Click STOP (ForceStopButton) at any time to:

  1. Signal the background loop to stop.
  2. Kill the in-flight FFmpeg process (so there's no "waiting for the current file to end" delay).
  3. Dispose of the VideoStreamer instance.
  4. Reset the status label/title to Stopped and re-enable START.

Closing the window also stops and disposes of any active stream automatically (Form1's FormClosed handler).

Choosing an RTMP destination​

Any RTMP(S)-compatible service works. A few examples:

PlatformExample RTMP URL
YouTube Livertmp://a.rtmp.youtube.com/live2
Twitchrtmp://live.twitch.tv/app
KickProvided in your Kick stream dashboard
Self-hosted (e.g. nginx-rtmp)rtmp://your-server-ip/live

Tips for reliable 24/7 streaming​

  • Prefer source files already encoded as H.264 video / AAC audio inside a container FFmpeg can remux cleanly to FLV (the app streams with -c copy, i.e. no re-encoding — see RunFfmpeg). Mixed/incompatible codecs across files can cause FFmpeg to fail for some files in the folder.
  • Keep the machine running the app online and awake — if the process/computer stops, the stream stops.
  • Because -c copy is used, the video resolution/framerate of each file determines the live stream's characteristics for its duration; wildly inconsistent source files may cause hiccups on some platforms (YouTube generally tolerates this well).
  • Test with a short clip and a private/unlisted stream first before going live publicly.