Voice: Discord 스타일 음성 및 비디오 방, 이제 Discourse에 번들링됨 🎙

지난해 말, 우리는 Resenha라는 실험적 프로젝트를 공개했습니다. 이 프로젝트는 Discord 스타일의 음성 및 비디오 룸을 Discourse에 직접 추가하는 것이었습니다. 외부 앱이 필요 없으며, 사이드바에서 피어-투-피어(P2P) WebRTC를 통해 작동합니다.

이 실험은 성공적이었습니다. 우리는 그 이후로 자체 회의에 이 기능을 사용하고 있으며, 오늘 드디어 정식 버전으로 거듭납니다. Resenha는 이제 Voice라는 이름으로, 모든 Discourse 설치 패키지에 포함된 핵심 플러그인으로 제공됩니다. :tada:

제공되는 기능

  • 사이드바 중심의 룸 — 클릭하여 입장하거나 나가고, 애니메이션된 발화 표시기가 있는 실시간 참가자 아바타를 확인하며, 대화하는 동안에도 포럼을 계속 둘러볼 수 있습니다. 라우트 변경이나 팝업 창 없이, 컴팩트한 통화 위젯이 사이트 곳곳을 따라다닙니다.
  • 비디오 및 화면 공유 — 각 룸에는 타일 그리드가 있는 전체 페이지가 제공되며, 카메라 및 화면 공유는 즉시 전환되고, 화질은 시청자 수에 따라 자동으로 조절됩니다.
  • 배경 흐림 처리 — MediaPipe 인물 분할이 브라우저 내에서 완전히 실행되며, 실시간 미리보기와 강도 조절이 가능합니다.
  • 노이즈 서프레션(소음 제거) — WebAssembly 오디오 워크렛으로 실행되는 세 가지 AI 엔진(RNNoise, DTLN, DeepFilterNet3) 중 선택할 수 있으며, 가벼운 수준부터 스튜디오급까지 지원됩니다.
  • 실시간 자막 — 옵트인 방식의 시청자 측 자막으로, NVIDIA Parakeet 음성 인식 엔진이 WebGPU를 통해 로컬에서 실행됩니다. 다국어 지원, 최첨단 기술, 로컬 AI. 통화 전사를 토픽 초안으로 직접 기록할 수도 있습니다.
  • 직접 통화 — 사용자 카드나 프로필에서 바로 누군가에게 통화를 걸 수 있습니다.
  • 룸별 텍스트 채팅 — 실제 Discourse 채팅으로 뒷받침됩니다: 각 통화는 해당 룸의 채팅 채널에서 별도의 스레드를 생성합니다.
  • 룸 권한 및 관리 — 공개, 그룹 제한, 비공개 룸; 그룹에 기반한 사용자 룸 생성 권한; 음소거, 디afen(마이크 및 스피커 끔), 사용자별 볼륨 조절, 강퇴 기능.
  • 테마 기반 오디오 큐 — 입장/나감과 통화 음향은 채팅 알림 사운드 팩을 따르므로, Voice의 사운드가 사이트의 나머지 부분과 일관성을 유지합니다.

작동 방식

기본적으로 모든 것이 피어-투-피어(P2P) 방식으로 작동합니다. Discourse 서버는 시그널링(signaling)만 처리하고, 미디어는 DTLS-SRTP 암호화를 통해 참가자 간에 직접 전송됩니다. 추가 인프라가 전혀 필요 없으며, 음성 기준 최대 약 50명, 비디오 기준 최대 10명 규모의 룸에 이상적입니다.

모든 오디오 및 비디오 처리(노이즈 서프레션, 배경 흐림, 자막)는 각 참가자의 기기에서 로컬로 실행됩니다. 제3자에게 아무것도 전송되지 않습니다.

더 큰 규모의 통화가 필요합니까? 플러그인을 클라우드 또는 셀프호스팅 LiveKit 서버를 가리키도록 설정하고, 모든 룸(또는 일부 룸)을 이를 통해 라우팅하십시오. 그러면 각 참가자는 룸 크기와 관계없이 모든 트랙을 정확히 한 번만 게시하게 됩니다. LiveKit을 통해 라우팅된 룸에서는 통화를 녹음할 수도 있으며, 녹음은 Discourse의 룸 UI에서 바로 제어할 수 있습니다.

활성화 방법

:discourse: Voice는 저희의 모든 호스팅 플랜에서 사용할 수 있습니다. 대규모 통화를 위한 LiveKit 통합은 BusinessEnterprise 플랜에서 사용할 수 있으며, 셀프호스터 :discourse-bw:는 자체 LiveKit 서버를 지정할 수 있습니다.

Voice는 Discourse에 번들로 포함되어 있으므로 설치할 것이 없습니다. 관리자 > 설정 > 플러그인 > voice enabled를 통해 활성화하십시오. 이 플러그인은 기본 “Watercooler” 룸을 시드하여, 바로 모임을 가질 수 있는 공간을 제공합니다.

그 후, voice_allowed_groups는 누가 룸에 참여할 수 있는지를, voice_create_room_allowed_groups는 누가 룸을 생성할 수 있는지를 제어합니다(기본값은 관리자, 모더레이터, TL2). 비디오는 기본적으로 켜져 있습니다. 직접 통화는 voice_direct_calls_allowed_groups에서 일부 그룹을 선택할 때까지 꺼져 있으며, 자막은 voice_subtitles_enabled을 통해 옵트인 방식으로 활성화됩니다(WebGPU가 필요하며, 각 사용자는 약 2.5GB 크기의 모델을 한 번 다운로드해야 합니다).

개인 저장소에서 Resenha 플러그인을 실행 중이셨다면, 번들로 제공되는 Voice 플러그인이 이를 대체하므로 가능할 때 app.yml에서 제거해 주십시오.

현황

아직 초기 단계입니다. 수개월간 매일 내부적으로 사용하며 테스트해 왔으며, 소규모 그룹에게는 매우 잘 작동하지만, 전체 커뮤니티에 공개하기 전에 팀에서 먼저 테스트해 보시기 바랍니다. 기본 P2P 경로에는 통화 녹음 기능이 없으며, 사용자 플래그, 강퇴, "통화 종료"를 제외한 모더레이션 도구는 아직 로드맵에 남아 있습니다.

피드백 환영

직접 사용해 보고 어떻게 작동하는지 알려주세요! 버그, 아이디어, 질문은 모두 이 토픽에서 환영합니다. PR도 환영하며, 이제 그 어느 때보다 쉬워졌습니다: 코드는 core에 있습니다. :microphone:

52개의 좋아요

잠깐 … 와 … 영상까지 그것도?

Man's Mind Blown Reaction

대박이다!

11개의 좋아요

와, 정말?

셀프호스팅 인스턴스에서 이걸 테스트하는 방법이 있을까요? 예를 들어 별도의 도커 컨테이너를 사용하는 것처럼요?

2개의 좋아요

최신 버전으로 재빌드하여 업데이트하고 관리자 페이지에서 새 플러그인을 활성화하면 됩니다. 추가적인 작업은 필요하지 않습니다.

6개의 좋아요

혹시 디스커스(Discourse) 스타일의 음성 및 비디오 룸을 말씀하시는 건가요? :innocent: :grin:

10개의 좋아요

그러면 NATS의 공개/비공개 키, 서브도메인, Coturn 서버, 그리고 제가 만들려고 했던 모든 스크립트를 그대로 두어도 되는 건가요? 브릿지로 사용할 안전한 Livekit 서버를 구축하기 위해요?

계속 진행해야 하더라도, 이걸 만들어 주셔서 감사합니다!

2개의 좋아요

즉, 인스턴스에서 STUN/TURN을 위해 전용 Coturn을 사용하려면 그렇게 하셔도 됩니다. LiveKit도 마찬가지입니다. 사용하고 싶으시다면 자유롭게 사용하셔도 됩니다.

박스에서 바로 사용할 수 있는 통화 기능에는 필수 사항은 아니지만, 이러한 유연성을 제공하고 있습니다.

2개의 좋아요

정말 좋은 소식이에요! 이렇게 될 것 같은 예감이 있었거든요, @Falco 감사합니다.

4개의 좋아요

게시글이 새 주제로 분리되었습니다: Exposing LiveKit status in site settings serializer

원래 발표를 놓쳤는데, 이 기능에 너무 설레서 지난 업데이트가 불과 4일 전이었는데도 discourse를 바로 업데이트했습니다.

사람들이 이 기능을 사용하게 되는 날을 기다릴 수 없습니다!

감사합니다!!! :tada:

큰 질문 하나 - 비디오 룸을 누구나 만들 수 있나요, 아니면 제한/권한/신뢰 수준에 따라 설정할 수 있나요?

추가 수정 - 활성화 후 컨트롤을 찾았습니다.

4개의 좋아요

엄청나요 :clap: ! 이제 Discourse는 일부 Discord 커뮤니티를 대체할 만큼 꽤 좋은 기능 세트를 갖추고 있고, 그와 진정으로 경쟁할 수 있다고 생각합니다.

10개의 좋아요

3개의 게시물이 새 주제로 분리되었습니다: 카메라 및 화면 공유에 대한 세부 권한

그룹별로 제한할 수 있습니다.

2개의 좋아요

Kerehn-1: 선글라스를 쓴 쿨한 고양이

2개의 좋아요

채팅처럼 버튼 하나를 만들어서 음성 플러그인 창을 띄우는 건 어떨까요? 채널 목록과 사용자 목록을 검색 기능과 함께 표시하면 좋겠습니다. 특히 모바일에서 사용할 때 유용할 것 같아요. 그냥 아이디어 하나예요 :sweat_smile:

1개의 좋아요

음성 방이 채팅에 표시되는데, 이렇게 하면 찾으시는 기능에 충분한가요?

해당 버튼은 음성 방이 아니라 모든 채팅을 위한 것입니다. 사용자가 이 버튼을 통해 음성 방에 입장하거나 나설 수 있습니다 :ok_hand:

3개의 좋아요

결과에 대한 스크린샷을 몇 장 찍어줄 수 있을까요? 이 부분(살롱/채팅)을 잘 이해하지 못해서요 :sweat_smile:

오, 정말로 사용해 볼 수 있어요. 음성 채팅 활성화 설정을 확인하고 채팅 화면을 최대화해서 열면 됩니다 :slight_smile:

음성 채팅이 활성화되어 있지만, 전체 화면에서 아무런 변화가 보이지 않네요. 제가 완전히 착각하고 있는 건가요 :rofl:

아, 찾았어요 :sweat_smile: 불편을 드려 죄송합니다

1개의 좋아요