Aramalar ve ses

Aramalar ve ses kanalları, ses, video ve ekran paylaşımını doğrudan sunucuya, kendi portları üzerinden gönderir. Bu sayfa, ağ tarafını, kurulumdan sonra kontrol etmeniz gereken ayarları ve kendi çalıştırdığınız bir konuşma-dan-metne modeliyle transkripsiyonu kapsar.

Aramalar nasıl çalışır

Çağrılar, Çağrılar uygulaması (com.mattermost.calls kimliği) tarafından sağlanır ve bu uygulama varsayılan olarak yüklü ve etkinleştirilidir. Ses kanalları (Ses Kanalları uygulaması, antimatter-next imajı), Çağrılar üzerine inşa edilmiş kalıcı arama odalarıdır: Çağrıların etkin olması gerekir ve aynı ayarları, portları ve sunucuları kullanırlar.

Aramalar uygulaması, Antimatter içinde bir medya sunucusu çalıştırır. Web uygulaması, masaüstü uygulaması ve mobil uygulamalar WebRTC ile bu sunucuya bağlanır:

  • sinyalizasyon (signalling), normal web bağlantısı üzerinden (HTTPS proxy'niz) geçer;
  • medya (ses, video, ekran paylaşımı) ise bu yoldan geçmez: doğrudan sunucuya, varsayılan olarak 8443 UDP ve TCP portuna gider.

Ayarlar Sistem Konsolu › Uygulama Ekleri › Çağrılar bölümündedir. Bunların her biri, antimatter servisindeki AM_CALLS_ ortam değişkeniyle de ayarlanabilir; bu durumda Sistem Konsolu'na göre öncelikli olur ve oradaki ayarı kilitler. Eski MM_CALLS_ adları da çalışır.

Kurulumdan sonra şunları kontrol edin

  1. Aramalar portunu açın. Sunucunun ve bulut sağlayıcınızın güvenlik duvarında 8443/udp ve 8443/tcp'yi izin verin.
  2. Sınav modunu kontrol edin. Sınav modu (DefaultEnabled) varsayılan olarak kapalıdır, bu nedenle herkes arama başlatabilir. Çağrıların çalıştığını kontrol ederken yalnızca sistem yöneticilerinin kanallarda arama başlatmasına izin vermek için Sistem Konsolu › Uygulama Ekleri › Çağrılar bölümünde Açık olarak ayarlayın, ardından tekrar kapatın. Değişken AM_CALLS_DEFAULT_ENABLED'dir: true değeri sınav modunun kapalı olduğunu belirtir. Mattermost'tan taşınan bir sunucu, yapılandırmasında kaydedilen seçimi korur.
  3. Video konusunda karar verin. Videoyu etkinleştir (EnableVideo, AM_CALLS_ENABLE_VIDEO) varsayılan olarak açıktır: çağrıların etkin olduğu her yerde, doğrudan ve grup iletilerinde ve kanallarda kişiler kameralarını açabilir. Ses kanallarında ise Ses kanallarında videoya izin ver ayarı (Ses Kanalları uygulamasından) belirleyicidir. Bunu kapatırsanız, ses kanallarında bile kimse kamerasını açamaz.
  4. NAT arkasındaysanız, herkese açık adresi ayarlayın (aşağıdaki bölüm).

Çağrıların açık olduğu yerler

Her topluluğun bir türü vardır: Çalışma alanı veya Topluluk (bkz. Yeni toplulukların türü). Yöneticileri çağrıları açık veya kapalı olarak ayarlamamış bir kanal, topluluğun türüne uyar:

  • bir çalışma alanında, kanallar sunucunun varsayılanını izler: sınav modu kapalıyken herkes için çağrılar açıktır;
  • bir toplulukta, kanallarda çağrılar kapalıdır: kişiler bunun yerine ses kanallarında konuşur. Kanal ve topluluk yöneticileri yine de bir kanalda çağrıları açabilir.

Bir kanalın kendi ayarı her zaman önceliklidir. Doğrudan ve grup iletiler bir topluluğa ait değildir: sınav modu kapalıyken oradaki çağrılar herkes için açıktır. Bir topluluğun türündeki değişiklik, çağrılara 30 saniye içinde yansır.

Portlar, NAT ve STUN

AyarDeğişkenVarsayılan
RTC Sunucu Portu (UDP)AM_CALLS_UDP_SERVER_PORT8443
RTC Sunucu Portu (TCP)AM_CALLS_TCP_SERVER_PORT8443
RTC Sunucu Adresi (UDP), (TCP)AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESSboş: tüm adresler
ICE Host Geçersiz KılmaAM_CALLS_ICE_HOST_OVERRIDEboş: STUN ile bulundu
ICE Host Port Geçersiz KılmaAM_CALLS_ICE_HOST_PORT_OVERRIDEboş: sunucu portu
ICE Sunucuları YapılandırmalarıAM_CALLS_ICE_SERVERS_CONFIGS[{"urls":["stun:stun.cloudflare.com:3478"]}]
(Deneysel) IPv6 desteğini etkinleştir(Sistem Konsolu)kapalı

Portlar 80 ile 49151 arasında olmalıdır. Sitein compose dosyasında .env içindeki CALLS_PORT değerini değiştirin: bu, her iki değişkeni de ayarlar ve portu, hem ana makinede hem de konteynerde aynı numarayla yayınlar. İstemciler önce UDP'yi dener, aynı portta TCP'ye geri döner.

İstemcilerin medya gönderdiği adres

Sunucu, her istemciye medya göndermesi gereken adresi ("host adayı") bildirir. Varsayılan olarak, isteğin geldiği adresi ve portu yanıt olarak veren herkese açık bir STUN sunucusuna sorarak herkese açık adresini bulur. Varsayılan, Cloudflare'ın herkese açık STUN sunucusudur: stun:stun.cloudflare.com:3478. Bunu kullanan tek taraf sunucu değildir: bir aramaya katılan her istemci de kendi herkese açık adresini bu sunucudan sorar. STUN sunucusu yalnızca IP adreslerini ve portları görür; asla arama sesini, videosunu veya iletilerini görmez.

Örneğin Mattermost'tan taşınma sonrasında ICE Sunucuları Yapılandırmaları içinde hâlâ Mattermost'un STUN sunucusu (stun.global.calls.mattermost.com) kayıtlı olan bir sunucu, bunun yerine Cloudflare'ınkini kullanır. Kayıtlı ayar değiştirilmez.

Adresi kendiniz ayarlayın:

  • sunucu NAT arkasındaysa veya birden fazla herkese açık adresi varsa: ICE Host Geçersiz Kılma değerini herkese açık IP adresine (veya bu adrese çözülen bir ana makine adına) ayarlayın;
  • NAT, 8443 portuna farklı bir herkese açık portu eşliyorsa: ICE Host Port Geçersiz Kılma değerini de o herkese açık porta ayarlayın;
  • sunucunun internet erişimi yoksa veya sunucu ile istemcilerin dış bir STUN sunucusuna bağlanmasını istemiyorsanız: ICE Host Geçersiz Kılma değerini ayarlayın ve STUN listesini AM_CALLS_ICE_SERVERS_CONFIGS=[] ile boşaltın. ICE Host Geçersiz Kılma ayarlandığında sunucu adresi için bir STUN sunucusuna soru sormaz; boş liste, istemcilerin soru sormasını engeller.
services:
  antimatter:
    environment:
      AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
      AM_CALLS_ICE_SERVERS_CONFIGS: "[]"

STUN'u üçüncü taraflar olmadan kullanmaya devam etmek için kendi STUN sunucunuzu çalıştırın (coturn gibi bir TURN sunucusu da STUN isteklerine yanıt verir) ve aşağıdaki TURN örneğinde olduğu gibi ICE Sunucuları Yapılandırmaları içinde onu listeleyin.

Yalnızca yerel ağda, sunucunun LAN adresini kullanın. Portları, adresleri veya ICE ayarlarını değiştirdikten sonra sunucuyu yeniden başlatın veya Calls uygulamasını devre dışı bırakıp etkinleştirin: medya sunucusu, uygulama başlatıldığında yapılandırılır.

Katı güvenlik duvarları için TURN

Bazı ağlar, hem UDP'yi hem de alışılmadık TCP portlarına giden bağlantıları engeller. Bu ağlardaki kullanıcılar, medyanın erişilebilir bir port üzerinden (genellikle 443) iletilmesini sağlayan bir TURN sunucusuna ihtiyaç duyar. Antimatter bir TURN sunucusu içermez; coturn gibi bir TURN sunucusu çalıştırın ve bunu ICE Servers Configurations adlı JSON listesine ekleyin:

[
  {"urls": ["stun:turn.example.com:3478"]},
  {"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
  • Paylaşılan bir gizli anahtar kullanıyorsanız (coturn'ün use-auth-secret özelliği), aynı gizli anahtarı TURN Static Auth Secret (AM_CALLS_TURN_STATIC_AUTH_SECRET) alanına girin: sunucu, her istemciye TURN Credentials Expiration (minutes) (varsayılan olarak 240) süresince geçerli olan kısa ömürlü kimlik bilgileri verir.
  • Sabit kimlik bilgileri kullanıyorsanız, bunun yerine TURN girdisine "username" ve "credential" alanlarını ekleyin.
  • Server Side TURN (varsayılan olarak kapalı), sunucunun başlattığı bağlantılar için de TURN sunucularını kullanır.

Diğer arama ayarları

AyarDeğişkenVarsayılanNe işe yarar
Max call participantsAM_CALLS_MAX_CALL_PARTICIPANTS0 (sınırsız)Tek bir aramada bulunabilecek en yüksek kişi sayısı.
Allow screen sharing(Sistem Konsolu)açıkKatılımcıların ekranlarını paylaşmasına olanak tanır.
Enable call ringingAM_CALLS_ENABLE_RINGINGaçıkBir doğrudan veya grup iletisinde arama başladığında, o iletideki diğer kişileri çalar.
Enable simulcast for screen sharing (Experimental)(Sistem Konsolu)kapalıEkran paylaşımlarını birden fazla kalitede gönderir.
Enable AV1 codec for screen sharing (Experimental)(Sistem Konsolu)kapalıSimulcast açıkken yok sayılır.

Ses Kanalları uygulamasının Sistem Konsolu › Uygulama ekleri › Ses Kanalları bölümünde iki ayarı vardır: Ses kanalını açarken katıl (varsayılan olarak açıktır) ve Ses kanallarında videoya izin ver (varsayılan olarak açıktır, ancak yukarıdaki videoya bakın). Topluluk yöneticileri, bir kanalı ayarları bölümünden ses kanalına dönüştürür.

Aramaları tamamen kapatmak için Sistem Konsolu › Uygulama ekleri › Uygulama eki yönetimi bölümünde Aramalar uygulamasını devre dışı bırakın veya AM_CALLS_DISABLE=true değerini ayarlayın. Bu durumda ses kanalları da çalışmayı durdurur.

Daha büyük sunucular: harici rtcd

Varsayılan olarak bir Antimatter sunucusu tüm arama medyasını taşır. Birçok eşzamanlı arama için veya medyayı sohbet sunucusundan uzak tutmak için, Calls uygulaması medyayı rtcd adlı ayrı bir medya sunucusuna (Mattermost'un açık kaynaklı rtcd sürümü 0.17 veya üzeri) devredebilir. RTCD service URL (AM_CALLS_RTCD_SERVICE_URL) ayarını yapılandırın, örneğin https://rtcd.example.com: bu durumda tüm aramalar bu sunucu üzerinden geçer ve istemciler medyalarını Antimatter'in portuna değil, rtcd'nin kendi portuna gönderir. Kimlik bilgileri AM_CALLS_RTCD_CLIENT_ID ve AM_CALLS_RTCD_AUTH_KEY ile verilebilir; bunlar verilmezse uygulama kendisini rtcd'ye kaydeder. Lisans gerekmez. Calls uygulaması, sunucuda aynı anda 50'den fazla kişinin aramada olduğu durumlarda yöneticilere rtcd kullanmalarını öneren bir uyarı gösterir.

Transkripsiyon ve canlı altyazılar

Antimatter, kendinizin çalıştırdığı bir konuşma-metin modelini kullanarak aramaları transkribe edebilir ve kişiler konuşurken canlı altyazılar gösterebilir. Antimatter, ağınızda bir Whisper sunucusu gibi, OpenAI uyumlu /v1/audio/transcriptions uç noktası sunan herhangi bir sunucuyu kullanabilir. Antimatter'den ek bir hizmet gerekmez.

Nasıl çalışır

  • Bir aramanın ev sahibi, arama kontrollerindeki Aramayı transkribe et seçeneğiyle transkripsiyonu başlatır. Transkripsiyon yapılıyor rozeti, bu durumu herkesin bilmesini sağlar.
  • Her katılımcının uygulaması kendi mikrofonunu dinler, konuşmayı kısa parçalara böler (en fazla 12 saniye, sessize alındığında asla) ve bunları Antimatter'e gönderir; Antimatter de onları konuşma-metin sunucunuza iletir.
  • Canlı altyazılar açıkken, her parçanın metni katılımcılara anında bir altyazi olarak gösterilir.
  • Transkripsiyon durduğunda veya arama sona erdiğinde, Calls botu transkripti bir metin dosyası ve bir WebVTT altyazı dosyası olarak, aramanın konusuna (ses kanallarında, kanala) gönderir.
  • Summarize transcriptions açıkken, Agents uygulamasının varsayılan ajanı da konuya bir özet gönderir (bkz. AI).
A call's thread: the Calls bot has posted the transcript as a text file, and an AI agent has posted a summary below it.
Aramadan sonra, aramanın konusundaki transkript ve özeti.

Yapılandırma

Bunları antimatter hizmetinde yapılandırın:

services:
  antimatter:
    environment:
      AM_CALLS_ENABLE_TRANSCRIPTIONS: "true"
      AM_CALLS_TRANSCRIBE_API: openai
      AM_CALLS_TRANSCRIBE_API_OPEN_AIURL: http://stt.internal:8000/v1
      AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL: whisper-1
      AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY: ""
      AM_CALLS_ENABLE_LIVE_CAPTIONS: "true"
      AM_CALLS_LIVE_CAPTIONS_LANGUAGE: en
AyarDeğişkenGirilecek değer
Enable call transcriptions (Beta)AM_CALLS_ENABLE_TRANSCRIPTIONStrue
Call transcriber APIAM_CALLS_TRANSCRIBE_APIopenai ("OpenAI-compatible API (no job service)" olarak gösterilir)
Speech-to-text API URLAM_CALLS_TRANSCRIBE_API_OPEN_AIURLAPI'nin temel URL'si, /v1 dahil.
Speech-to-text modelAM_CALLS_TRANSCRIBE_API_OPEN_AI_MODELAPI'nin bildiği model adı, örneğin whisper-1. Zorunludur.
Speech-to-text API keyAM_CALLS_TRANSCRIBE_API_OPEN_AI_KEYBearer token olarak gönderilir. API gerekmiyorsa boş bırakın.
Canlı altyazıları etkinleştir (Beta)AM_CALLS_ENABLE_LIVE_CAPTIONSArama sırasında altyazılar için true.
Canlı altyazı diliAM_CALLS_LIVE_CAPTIONS_LANGUAGEKonuşulan dil, iki harfli kod olarak (en varsayılan). Transkripsiyonlar için de konuşmadan metne dönüştürme API'sine gönderildiğinden, altyazı olmasa bile ayarlayın.
Transkripsiyonları özetleAM_CALLS_SUMMARIZE_TRANSCRIPTIONSArama sonrasında bir yapay zeka özeti için true.
Sistem Konsolu'nda, transkripsiyon ayarları yalnızca Arama kayıtlarını etkinleştir açıkken görünür, oysa bu tür transkripsiyonlar kayıt gerektirmez. Yukarıdaki değişkenlerle ayarlamak bunu önler. openai transkripsiyoneriyle birlikte kayıtları açmayın: kayıt başlatıldığında job-service transkripsiyonerini başlatmaya çalışır ve başarısız olur.

Transkripsiyon açıkken konuşan herkesin sesi, yapılandırdığınız konuşmadan metne dönüştürme sunucusuna gider ve transkripsiyon, kanaldaki herkesin okuyabileceği şekilde paylaşılır. Kullanıcılarınıza bunu bildirin ve aramalar gizliyse bu sunucuyu kendi ağınızda tutun.

Kayıtlar

Arama kayıtları (ve yerleşik whisper.cpp veya Azure transkripsiyon araçlarıyla transkripsiyon), Antimatter'in yanına kendiniz dağıtmanız gereken, Mattermost'un açık kaynaklı calls-offloader görev hizmeti tarafından başlatılan ayrı konteynerlerde çalışır. Ayarlar şunlardır: Arama kayıtlarını etkinleştir (AM_CALLS_ENABLE_RECORDINGS, varsayılan olarak kapalı), Görev hizmeti URL'si (AM_CALLS_JOB_SERVICE_URL), Maksimum arama kaydı süresi (varsayılan olarak 60 dakika, 15 ile 180 arasında) ve Arama kaydı kalitesi (düşük, orta veya yüksek; varsayılan olarak orta). Lisans gerekmez. Kayıtlar etkinleştirildiğinde, bir aramanın ev sahibi, arama kontrollerindeki Aramayı kaydet seçeneğiyle kaydı başlatır ve durdurur; aramada bulunan herkes kaydın yapıldığını görür ve kayıt durduğunda, kayda ait dosya aramanın konusuna gönderilir. Ses kanallarındaki aramaların konusu olmadığından kaydedilemez. Sadece transkripsiyon ve altyazılar için, yukarıdaki konuşmadan metne ayarları daha basittir: görev hizmeti gerektirmez.