GitHub Actions memang terkenal sebagai alat otomatisasi CI/CD, tapi tahukah kamu kalau platform ini juga bisa dipakai untuk mengatur streaming YouTube? Dengan sedikit konfigurasi, kamu bisa membuat proses streaming menjadi otomatis, terjadwal, dan bahkan terintegrasi dengan repo kode sumber kamu. Ide ini sangat berguna bagi pembuat konten yang ingin mengurangi kerja manual, atau bagi developer yang ingin men-deploy video tutorial secara rutin.

Pada artikel ini, kita akan membahas contoh workflow GitHub Actions yang dapat menjalankan streaming ke YouTube secara langsung. Mulai dari persiapan environment, mengatur secrets, menulis file YAML, hingga menambahkan trik-trik kecil agar streaming kamu berjalan mulus tanpa gangguan. Jadi, siapkan kopi, buka editor favorit, dan ikuti langkah demi langkahnya!

Kenapa Memilih GitHub Actions untuk Streaming YouTube?

What is GitHub Actions? - Everything you need to know to get started

GitHub Actions menawarkan beberapa keunggulan yang membuatnya cocok untuk tugas streaming:

  • Otomatisasi penuh: Jadwalkan streaming, trigger lewat push, atau bahkan lewat webhook eksternal.
  • Environmen terisolasi: Setiap job berjalan di container atau VM yang bersih, mengurangi risiko konflik dependensi.
  • Integrasi dengan Secrets: Simpan API key YouTube, OAuth token, atau credential lain dengan aman.
  • Skalabilitas: Kamu bisa menambah runner self‑hosted jika butuh performa lebih tinggi (misalnya untuk resolusi 1080p).

Jika kamu baru saja membaca Cara Menghubungkan YouTube Live dengan GitHub Actions, kamu pasti sudah merasakan betapa mudahnya mengotomatiskan proses streaming. Pada bagian ini, kita akan menambahkan layer detail teknis sehingga workflow kamu semakin robust.

Komponen Utama dalam Workflow Streaming

1. Repository dan Struktur Direktori

Pastikan repo kamu memiliki struktur yang jelas, misalnya:

/
├─ .github/
│   └─ workflows/
│       └─ youtube-stream.yml
├─ scripts/
│   └─ start-stream.sh
└─ README.md

Folder .github/workflows adalah tempat menyimpan file YAML yang mendefinisikan aksi. Sementara scripts/start-stream.sh berisi perintah yang akan mengeksekusi streaming menggunakan ffmpeg atau library lain.

2. Secrets dan Credential

Untuk mengakses API YouTube Live, kamu memerlukan OAuth 2.0 access token atau API key. Simpan nilai-nilai ini di Settings > Secrets > Actions pada repo kamu dengan nama seperti YOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRET, YOUTUBE_REFRESH_TOKEN. GitHub secara otomatis menyembunyikan nilai ini saat workflow dijalankan.

3. Runner (Ubuntu vs Self‑Hosted)

Untuk kebanyakan kasus, runner berbasis Ubuntu (misalnya ubuntu-latest) sudah cukup. Jika kamu butuh GPU atau hardware khusus untuk encoding, pertimbangkan menambahkan self‑hosted runner dengan spesifikasi yang sesuai.

Contoh Workflow Lengkap

Flowchart Workflow Template Diagram Alur Proses Proses Bisnis Struktur

Berikut adalah contoh file youtube-stream.yml yang siap pakai. Kamu dapat menyesuaikannya sesuai kebutuhan, misalnya menambah jadwal atau trigger lain.

name: YouTube Live Streaming

on:
  schedule:
    # Setiap hari Senin jam 20:00 UTC (sesuaikan dengan timezone kamu)
    - cron: '0 20 * * 1'
  workflow_dispatch:   # Memungkinkan manual trigger lewat UI GitHub

jobs:
  stream:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up Node.js (jika pakai script Node)
        uses: actions/setup-node@v3
        with:
          node-version: '20'

      - name: Install ffmpeg
        run: |
          sudo apt-get update
          sudo apt-get install -y ffmpeg

      - name: Prepare environment variables
        env:
          YOUTUBE_CLIENT_ID: ${{ secrets.YOUTUBE_CLIENT_ID }}
          YOUTUBE_CLIENT_SECRET: ${{ secrets.YOUTUBE_CLIENT_SECRET }}
          YOUTUBE_REFRESH_TOKEN: ${{ secrets.YOUTUBE_REFRESH_TOKEN }}
        run: |
          echo "YOUTUBE_CLIENT_ID=${YOUTUBE_CLIENT_ID}" >> $GITHUB_ENV
          echo "YOUTUBE_CLIENT_SECRET=${YOUTUBE_CLIENT_SECRET}" >> $GITHUB_ENV
          echo "YOUTUBE_REFRESH_TOKEN=${YOUTUBE_REFRESH_TOKEN}" >> $GITHUB_ENV

      - name: Generate Access Token
        id: token
        run: |
          ACCESS_TOKEN=$(curl -s 
            -X POST 
            -d client_id=${YOUTUBE_CLIENT_ID} 
            -d client_secret=${YOUTUBE_CLIENT_SECRET} 
            -d refresh_token=${YOUTUBE_REFRESH_TOKEN} 
            -d grant_type=refresh_token 
            https://oauth2.googleapis.com/token | jq -r .access_token)
          echo "access_token=${ACCESS_TOKEN}" >> $GITHUB_OUTPUT

      - name: Start streaming (ffmpeg)
        env:
          ACCESS_TOKEN: ${{ steps.token.outputs.access_token }}
        run: |
          # Contoh streaming dari file video lokal
          ffmpeg -re -i ./assets/intro.mp4 
            -c:v libx264 -preset veryfast -b:v 2500k 
            -c:a aac -b:a 128k 
            -f flv "rtmp://a.rtmp.youtube.com/live2/${{ secrets.YOUTUBE_STREAM_KEY }}"

      - name: Notify via Discord (optional)
        if: always()
        uses: sarisia/actions-discord@v1
        with:
          webhook: ${{ secrets.DISCORD_WEBHOOK }}
          username: "GitHub Actions Bot"
          avatar_url: "https://i.imgur.com/XYZ.png"
          content: "Streaming YouTube Live selesai! 🎬"

Penjelasan singkat tiap langkah:

  • Schedule & manual trigger: Kamu dapat menjadwalkan streaming atau menjalankannya secara manual melalui UI.
  • Install ffmpeg: Alat utama untuk meng‑encode video dan meng‑stream ke RTMP endpoint YouTube.
  • Generate Access Token: Karena token refresh diperlukan untuk mengakses API, langkah ini mengambil token baru tiap kali workflow berjalan.
  • Start streaming: Perintah ffmpeg mengirimkan video ke endpoint RTMP YouTube dengan stream key yang disimpan sebagai secret.
  • Notify via Discord: Opsional, tapi sangat membantu untuk memberi tahu tim kalau streaming sudah selesai atau terjadi error.

Tips Optimasi dan Troubleshooting

Gunakan Self‑Hosted Runner untuk Latency Rendah

Jika kamu mengalami lag atau buffering pada kualitas tinggi, pertimbangkan menambahkan self‑hosted runner yang berada di dekat data center Google Cloud. Hal ini dapat mengurangi latency antara runner dan server ingest YouTube.

Pastikan Stream Key Tidak Kedaluwarsa

Stream key YouTube memiliki masa berlaku tertentu. Simpan key dalam Secrets dan refresh secara berkala. Jika key berubah, update secret segera agar workflow tidak gagal.

Monitoring Log dengan Artifacts

Tambahkan langkah untuk meng‑upload log ffmpeg sebagai artifact. Dengan begitu, bila streaming berhenti tiba‑tiba, kamu bisa melihat detail error di tab “Actions”. Contoh:

- name: Upload ffmpeg log
  if: failure()
  uses: actions/upload-artifact@v3
  with:
    name: ffmpeg-log
    path: ffmpeg.log

Gunakan Variable Substitution untuk Resolusi Dinamis

Jika kamu ingin mengubah resolusi atau bitrate secara otomatis berdasarkan ukuran file, gunakan ffprobe untuk membaca metadata sebelum memanggil ffmpeg. Berikut contoh singkatnya:

VIDEO_INFO=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height,bit_rate -of json input.mp4)
WIDTH=$(echo $VIDEO_INFO | jq '.streams[0].width')
HEIGHT=$(echo $VIDEO_INFO | jq '.streams[0].height')
BITRATE=$(echo $VIDEO_INFO | jq '.streams[0].bit_rate')

Integrasi dengan Tools Lain

Jual Pin/Brivet Integrasi TNI-POLRI Exclusive - Jakarta Selatan

Deploy Konten ke CDN setelah Streaming Selesai

Setelah live selesai, kamu mungkin ingin menyimpan rekaman ke bucket Cloud Storage atau CDN. Tambahkan job terpisah yang menyalin file hasil ffmpeg ke storage dan meng‑generate link publik.

Gunakan GitHub Pages untuk Landing Page Live

Jika kamu ingin menampilkan embed player YouTube di website statis, buat workflow yang otomatis memperbarui file HTML di gh-pages setiap kali streaming dimulai. Kombinasi ini memberi penonton akses mudah lewat satu klik.

Automasi Caption dengan Whisper AI

Untuk meningkatkan aksesibilitas, kamu dapat menambahkan langkah yang mengeksekusi model Whisper (OpenAI) untuk menghasilkan subtitle otomatis dari audio stream. Simpan subtitle sebagai file .vtt dan upload ke YouTube lewat API.

Semua integrasi di atas dapat dikelola dalam satu file YAML atau dipisah menjadi beberapa job yang berkomunikasi lewat needs dan outputs. Fleksibilitas GitHub Actions memungkinkan kamu menyesuaikan pipeline sesuai kebutuhan kreatif atau teknis.

Kalau kamu masih mencari panduan lebih detail tentang cara menyiapkan streaming dengan Node.js, cek Cara Mudah Streaming Video YouTube Pakai Node.js dan GitHub – Panduan Lengkap untuk Pemula. Di sana dijelaskan bagaimana menulis script Node yang memanggil API YouTube, yang dapat kamu integrasikan ke dalam workflow di atas.

Dengan contoh workflow ini, kamu tidak lagi harus membuka OBS atau software streaming lain setiap kali ingin siaran. Semua dapat dijadwalkan, dipantau, dan di‑log secara otomatis lewat GitHub. Selamat mencoba, dan semoga streaming kamu makin profesional serta bebas ribet!