Discourse 비디오 스트림 🎥

Discourse Video Stream은 고품질 롱폼 영상 콘텐츠 및 라이브 스트리밍을 Discourse 사이트에 업로드하고 임베드할 수 있도록 Cloudflare Stream과의 원활한 통합을 제공합니다.

개요

이 플러그인은 적응형 비트레이트 스트리밍을 통해 대용량 영상 파일을 처리하는 완전한 워크플로를 제공합니다. 사용자는 컴포저에서 영상을 직접 업로드하고, 네트워크 상태에 따라 품질이 자동으로 조정되어 재생됩니다. 또한 RTMPS 브로드캐스팅을 통한 라이브 스트림 생성도 지원합니다.

주요 기능

  • :clapper_board: 컴포저 통합: 컴포저에서 영상을 직접 업로드할 수 있는 선택적 툴바 버튼
  • :outbox_tray: 자동 업로드 가로채기: 설정 가능한 크기 임계값을 초과하는 영상은 로컬 저장소가 아닌 Cloudflare Stream으로 자동으로 업로드됩니다
  • :high_voltage: 재개 가능한 업로드: 연결 문제 발생 시 자동으로 재개되는 tus-js-client 기반의 200MB를 훨씬 초과하는 파일의 안정적인 업로드 지원
  • :locked: 보안 프록시: 서버 측 엔드포인트가 짧은 수명의 Cloudflare Stream 업로드 URL을 생성하여 API 자격 증명을 안전하게 유지합니다
  • :satellite_antenna: 라이브 스트리밍: 컴포저에서 직접 RTMPS 브로드캐스팅으로 라이브 스트림 생성
  • :movie_camera: 커스텀 BBCode: 영상을 임베드하기 위한 간단한 [video-stream id="..."] 문법
  • :television: 적응형 스트리밍: 다양한 네트워크 속도에서도 부드러운 재생을 위한 DASH 매니페스트와 함께 Shaka Player 통합
  • :gear: 재생 제어: 해상도 선택 및 재생 속도 제어를 위한 내장 UI

설치

app.yml에 플러그인을 추가하세요:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/xfalcox/discourse-video-stream.git

그런 다음 컨테이너를 재빌드하세요:

./launcher rebuild app

설정

관리자 → 설정 → 비디오 스트리밍으로 이동하여 다음을 구성하세요:

설정 항목 설명 기본값
video_stream_enabled 비디오 스트리밍 플러그인 활성화 false
video_stream_account_id Cloudflare 계정 식별자 -
video_stream_api_token Stream:Edit 권한이 있는 API 토큰 -
video_stream_customer_subdomain Cloudflare Stream 도메인 (예: customer-xxxxx.cloudflarestream.com) -
video_stream_allowed_extensions 허용된 비디오 형식의 쉼표로 구분된 목록 mp4,webm,mov
video_stream_max_file_size 최대 파일 크기(MB, 1-2000) 500
video_stream_intercept_native_uploads 대용량 비디오 업로드 자동 가로채기 true
video_stream_intercept_threshold_mb 자동 가로채기를 위한 MB 단위 크기 임계값(1-2000) 10
video_stream_enable_live_streams 라이브 스트리밍 기능 활성화 false

Cloudflare Stream 자격 증명 가져오기

  1. Cloudflare 대시보드에 로그인하세요
  2. 계정에서 Stream으로 이동하세요
  3. Stream 개요에서 계정 ID를 복사하세요
  4. Stream:Edit 권한이 있는 API 토큰을 생성하세요
  5. Stream 설정에서 고객 서브도메인을 메모하세요

사용법

설정이 완료되면 사용자는 두 가지 방법으로 영상을 업로드할 수 있습니다:

자동 가로채기

사용자가 video_stream_intercept_threshold_mb 설정을 초과하는 영상 파일을 드래그 앤 드롭하거나 선택하면, 플러그인은 로컬 저장소가 아닌 Cloudflare Stream을 통해 자동으로 처리합니다. 이 기능이 작동하려면 허용된 확장자 설정에서 비디오 파일 확장자를 허용해야 합니다.

수동 업로드

사용자는 컴포저 툴바의 팝업 메뉴(:plus:)를 클릭하여 비디오 업로드 옵션을 선택함으로써 Cloudflare Stream으로 명시적으로 업로드할 수 있습니다.

두 방법 모두 해상도와 속도 제어가 포함된 적응형 스트리밍 플레이어로 렌더링되는 [video-stream id=“video_id”] BBCode 태그를 삽입합니다.

라이브 스트리밍

video_stream_enable_live_streams가 활성화되면 사용자는 라이브 스트림을 생성할 수 있습니다:

  1. 컴포저 툴바의 팝업 메뉴(:plus:)를 클릭하여 "라이브 스트림 생성"을 선택하세요
  2. 모달이 Cloudflare Stream API를 통해 RTMPS 자격 증명을 생성합니다
  3. 편리한 복사 버튼을 사용하여 RTMPS URL과 스트림 키를 복사하세요
  4. OBS, Streamlabs 또는 기타 RTMPS 호환 브로드캐스팅 소프트웨어에 자격 증명을 사용하세요
  5. “임베드 삽입"을 클릭하여 [video-stream id=”…"] BBCode를 게시글에 추가하세요
  6. 즉시 브로드캐스팅을 시작하세요

라이브 스트림 기능:

  • 기본적으로 자동 녹화가 활성화되어 있습니다(스트림이 나중에 재생을 위해 저장됨)
  • 라이브 및 녹화 콘텐츠 모두에 동일한 적응형 플레이어가 작동합니다
  • 사용자는 스트리밍 중에는 라이브 콘텐츠를 보고, 종료 후에는 녹화본을 시청할 수 있습니다
  • 경고 메시지와 함께 안전한 자격 증명 처리

왜 Cloudflare Stream인가?

AWS를 사용하여 동일한 작업을 수행하는 코드를 지원하고, Mux는 GitHub - discourse/discourse-video · GitHub 에서 지원하므로, 더 저렴한 대안인 것이 좋은 아이디어라고 생각했습니다.

요구 사항

  • Stream이 활성화된 활성 Cloudflare 계정

소스 및 지원

스크린샷

데모

테스트 사이트를 방문하여 몇 가지 영상을 업로드해 보세요

https://discourse-on-a-pi5.falco.dev/t/test-video-upload-plugin/20?u=falco


참고: 이것은 공식 플러그인이 아닙니다.

18개의 좋아요

업데이트: 라이브 스트리밍 지원 시작! :satellite_antenna:

이제 이 플러그인은 RTMPS 방송을 통한 라이브 스트리밍을 지원합니다!

신규 기능:

  • 컴포저 도구막대 메뉴에서 라이브 스트리밍을 직접 생성
  • Cloudflare Stream API를 통해 RTMPS 자격 증명을 즉시 발급
  • OBS, Streamlabs 또는 기타 RTMPS 호환 소프트웨어로 스트리밍
  • 자동 녹화 활성화 - 방송 종료 후 재생을 위해 스트리밍이 저장됨
  • 라이브 및 녹화 콘텐츠 모두 동일한 [video-stream id="..."] BBCode 및 적응형 플레이어 사용

활성화 방법:
관리자 → 설정 → 비디오 스트리밍에서 video_stream_enable_live_streamstrue로 설정하세요.

라이브 스트리밍 워크플로우에 대한 자세한 내용은 업데이트된 첫 번째 게시글(OP)을 참고하세요.

14개의 좋아요

안녕하세요, 정말 좋습니다. 저는 영화와 TV 업계에서 일하고 있으며, 미디어 중심의 경험을 구축하고 있습니다.

우리는 Bunny를 사용하고 있습니다. 플러그인의 엔드포인트를 수정하여 다른 CDN/스트리밍 플랫폼을 허용하는 것이 얼마나 쉬울까요?

5개의 좋아요

Bunny의 제공 방식이 Cloudflare의 것과 매우 유사해 보이므로, 이를 지원하도록 추가하는 것은 쉬울 것입니다.

4개의 좋아요

Falco, 고마워. 확인해 볼게.

1개의 좋아요

훌륭한 플러그인이네요. 감사합니다. 처음 업로드했을 때 커뮤니티에서는 영상이 정상 작동했지만 오디오는 작동하지 않았습니다. 반면 Cloudflare에서는 영상과 오디오 모두 정상적으로 작동했습니다. 삭제한 후 다시 시도해 보니 이제 모든 것이 정상적으로 작동합니다.

1개의 좋아요