BigBlueButton.plNiezależny serwis po polsku

Nagrywanie

Proces zapisu, przetwarzania, publikacji i odtwarzania nagrań spotkań.

Tłumaczenie automatyczne 4.0 Stan źródeł:
Ilustracja rozdziału: Nagrywanie
Ilustracja z repozytorium dokumentacji BigBlueButton, tag v4.0.0. Niektóre obrazy źródłowe przedstawiają starszy interfejs. Źródło ilustracji.

W tym dokumencie zakłada się, że czytelnik rozumie obecną architekturę BigBlueButton.

Przegląd

BigBlueButton rejestruje wszystkie zdarzenia i dane multimedialne wygenerowane podczas sesji BigBlueButton w celu późniejszego odtworzenia.

Jeśli chcesz zobaczyć funkcję nagrywania i odtwarzania (RaP) w działaniu, użyj Greenlight na serwerze demonstracyjnym i nagraj sesję demo. Następnie możesz go odtworzyć, gdy pojawi się na liście „Nagrane sesje” na tej samej stronie. Przetwarzanie i publikowanie multimediów do odtwarzania po zakończeniu sesji może zająć kilka minut.

Podobnie jak sesje BigBlueButton, zarządzanie nagraniami powinno być obsługiwane przez oprogramowanie innej firmy. Aby to osiągnąć, oprogramowanie innych firm wykorzystuje BigBlueButton API. Jako użytkownik możesz chcieć skorzystać z oprogramowania innej firmy, które ustawi odpowiednią wartość parametru „rekord”. Jako programista możesz chcieć skorzystać z (nieoficjalnej) biblioteki, która implementuje wywołania API w preferowanym przez Ciebie języku, lub zaimplementować ją samodzielnie.

Z technicznego punktu widzenia, w API BigBlueButton, jeśli przekażesz parametr record=true za pomocą create, BigBlueButton utworzy sesję z włączoną funkcją nagrywania. W takim przypadku doda nowy przycisk do paska narzędzi u góry okna z ikoną koła, za pomocą którego moderator sesji może wskazać sekcje spotkania, które mają zostać nagrane.

Podczas sesji z włączonym nagrywaniem BigBlueButton zapisze slajdy, czat, dźwięk, udostępnianie pulpitu (współdzielenie pulpitu), zdarzenia na tablicy, udostępnione notatki, podpisy, wyniki ankiet i kamery internetowe do późniejszego przetworzenia. Jest to wyjątkowy sposób nagrywania spotkania, ponieważ umożliwia różnym przepływom pracy tworzenie nagrań o różnych właściwościach, łącząc media w unikalny sposób.

Po zakończeniu sesji serwer BigBlueButton uruchomi skrypt archiwum, który skopiuje wszystkie powiązane pliki do jednego katalogu. Następnie sprawdza, czy moderator podczas sesji kliknął przycisk „Nagraj”, aby wskazać część spotkania, która powinna zostać nagrana. Jeżeli w trakcie sesji nie został kliknięty przycisk nagrywania, pliki trafiają do kolejki do usunięcia po dwóch tygodniach. (Możesz to pominąć i wymusić przetworzenie nagrania; zobacz polecenie bbb-record --rebuild poniżej.)

Po zarchiwizowaniu nagrania BigBlueButton uruchomi jeden (lub więcej) skryptów pozyskiwania i przetwarzania, zwanych przepływami pracy, które przetworzą i opublikują przechwycone dane w formacie do odtworzenia.

Record and Playback - Overview

Fazy nagrywania i odtwarzania

BigBlueButton przetwarza nagrania w następującej kolejności:

  1. Przechwytywanie
  2. Archiwum
  3. Poczytalność
  4. Przetwarzanie
  5. Publikowanie
  6. Odtwarzanie

Przechwytywanie

Faza przechwytywania obejmuje umożliwienie modułom BigBlueButton (czat, prezentacja, wideo, głos itp.) emitowania zdarzeń przez magistralę zdarzeń w celu przechwycenia na serwerze BigBlueButton. Komponenty generujące multimedia (kamera internetowa, głos, deskshare) muszą również przechowywać swoje strumienie danych na serwerze.

Tablica, kursor, czat i inne zdarzenia są przechowywane w Redis. Filmy z kamery internetowej (.flv) i filmy współdzielone na biurku (.flv) są nagrywane przez Red5. Plik konferencji audio (.wav) jest nagrywany przez FreeSWITCH. Udostępnione notatki są eksportowane z serwera bbb-shared-notes-server (BlockNote).

Archiwum

Faza archiwizacji polega na umieszczeniu przechwyconych multimediów i zdarzeń w surowym katalogu. Katalog ten zawiera WSZYSTKIE niezbędne multimedia i pliki, z którymi można pracować.

Record and Playback - Archive

Poczytalność

Faza Poczytalności polega na sprawdzeniu, czy wszystkie zarchiwizowane pliki nadają się do przetwarzania. Na przykład , że pliki multimedialne nie mają zerowej długości i zdarzenia zostały zarchiwizowane.

Record and Playback - Sanity

Proces

Faza Procesu polega na przetwarzaniu prawidłowych zarchiwizowanych plików nagrania zgodnie z przepływem pracy (np. prezentacja). Zwykle polega to na parsowaniu zarchiwizowanych zdarzeń, konwertowaniu plików multimedialnych do innych formatów lub łączeniu ich itp.

Record and Playback - Process

Publikuj

Faza publikowania polega na wygenerowaniu metadanych i pobraniu wielu lub wszystkich przetworzonych plików i umieszczeniu ich w katalogu udostępnionym publicznie w celu późniejszego odtworzenia.

Record and Playback - Publish

Post-skrypty

Post-skrypty umożliwiają wykonanie działań specyficznych dla witryny po każdym z archiwizacji, przetwarzania i Opublikuj kroki przetwarzania nagrania.

Kilka przykładów rzeczy, do których możesz wykorzystać post-skrypty:

  • Wysyłanie wiadomości e-mail po opublikowaniu nagrania. — Po zarchiwizowaniu lub opublikowaniu nagrania wykonaj kopię zapasową nagrania na innym serwerze.
  • Wyślij wiadomość tekstową po opublikowaniu nagrania. — Kompresuj pliki multimedialne i udostępniaj je publicznie do pobrania po ich opublikowaniu.
  • Usuń surowe pliki multimedialne po zakończeniu przetwarzania nagrywania.

Odtwarzanie

Faza odtwarzania obejmuje pobieranie opublikowanych plików (audio, kamera internetowa, udostępnianie biurka, czat, zdarzenia, notatki, podpisy, ankiety, metadane) i odtwarzanie ich w przeglądarce.

Korzystając z przepływu pracy prezentacji, odtwarzanie obsługiwane jest przez biblioteki HTML, CSS i JavaScript; jest w pełni dostępny w przeglądarkach Mozilla Firefox i Google Chrome (również na urządzeniach z systemem Android). W innych przeglądarkach , takich jak Opera czy Safari, odtwarzanie będzie działać bez wszystkich funkcji, np. miniatury nie będą wyświetlane.

Nie ma unikalnego pliku wideo do odtwarzania w procesie prezentacji. Jednakże do wygenerowania tego unikalnego pliku wideo można zastosować przepływ pracy wideo. Ten przepływ pracy nie jest domyślnie włączony. Zobacz sekcję poniżej do , aby dowiedzieć się, jak to włączyć.

Przechowywanie multimediów

Niektóre fazy nagrywania i odtwarzania przechowują obsługiwane przez siebie multimedia w różnych katalogach:

Przechwycone pliki

  • AUDIO: /var/freeswitch/meetings
  • KAMERA INTERNETOWA: /var/lib/bbb-webrtc-recorder/recordings/<meetingid>
  • UDOSTĘPNIANIE EKRANU: /var/lib/bbb-webrtc-recorder/screenshare/<meetingid>
  • SLAJDY: /var/bigbluebutton/<meetingid>
  • UWAGI: http://127.0.0.1:8787/loopback/api/documents
  • WYDARZENIA: Redis

Pliki archiwalne

Plik archiwalny znajduje się w /var/bigbluebutton/recording/raw/<internal-meeting-id>/.

Pliki sprawdzone pod względem poprawności

Pliki sprawdzenia poprawności są przechowywane w tym samym miejscu, co pliki zarchiwizowane.

Przetworzone pliki

Przetworzone pliki znajdziesz w /var/bigbluebutton/recording/process/presentation/<internal-meeting-id>/.

Opublikowane pliki

Opublikowane pliki znajdują się w /var/bigbluebutton/recording/publish/presentation/<internal-meeting-id>/.

Pliki odtwarzania

Pliki odtwarzania znajdują się w /var/bigbluebutton/published/presentation/<internal-meeting-id>/.

Zarządzaj nagraniami

BigBlueButton nie posiada interfejsu sieciowego administratora do kontrolowania sesji lub nagrań, ponieważ w obu przypadkach są one obsługiwane przez oprogramowanie innych firm, ale posiada przydatne narzędzie do monitorowania stanu i kontrolowania nagrań w fazach opisanych powyżej.

W terminalu twojego serwera możesz uruchomić bbb-record, który wyświetli każdą opcję wraz z opisem:

BigBlueButton Recording Diagnostic Utility (BigBlueButton Version 2.5.N)

   bbb-record [options]

Reporting:
   --list                              List all recordings
   --list-recent                       List recent recordings
   --list-recent --withDesc            List recent recordings and show their description
   --list-workflows                    List available recording workflows

Monitoring:
   --watch                             Watch processing of recordings
   --watch --withDesc                  Watch processing of recordings and show their description

Administration:
   --rebuild <internal meetingID>      rebuild the output for the given internal meetingID
   --rebuildall                        rebuild every recording
   --delete <internal meetingID>       delete one meeting and recording
   --deleteall                         delete all meetings and recordings
   --debug                             check for recording errors
   --check                             check for configuration errors
   --enable <workflow>                 enable a recording workflow
   --disable <workflow>                disable a recording workflow
   --tointernal <external meetingId>   get the internal meeting ids for the given external meetingId
   --toexternal <internal meetingId>   get the external meeting id for the given internal meetingId
   --republish <internal meetingID>    republish the recording for meetingID.
                                       (Only for Matterhorn Integration)

Przydatne ustawienia

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Imię Ścieżka (plik) Opis
kamery internetoweTylko dlaModeratora /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties Jeśli to prawda, podczas odtwarzania będzie pokazywana tylko kamera moderatora, w zależności od sposobu, w jaki show_moderator_viewpoint. Można to zmienić podczas trwającego spotkania
show_moderator_viewpoint /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml Jeśli false, zostanie pokazany punkt widzenia widza, co oznacza, że ​​jeśli powyższa właściwość jest ustawiona na true, wyświetlana będzie tylko kamera moderatora.

Przydatne terminy

  • przepływ pracy - to sposób, w jaki nagranie jest przetwarzane, publikowane i odtwarzane. W BigBlueButton 2.4 unikalnym przepływem pracy jest format „prezentacji”. — wewnętrzny identyfikator spotkania — to ciąg alfanumeryczny, który wewnętrznie identyfikuje nagrane spotkanie. Jest tworzony wewnętrznie przez BigBlueButton. Na przykład „183f0bf3a0982a127bdb8161e0c44eb696b3e75c-1379693236230”. — zewnętrzny identyfikator spotkania — to identyfikator ustawiony dla spotkania, np. „Angielski 201” lub „Moja niesamowita klasa”, „Chemia 2”. Jest przekazywany poprzez wywołanie API tworzenia.
  • nagranie - nagranie spotkania w BigBlueButton.

W BigBlueButton możesz używać tego samego zewnętrznego identyfikatora spotkania (na przykład „English 101”) w wielu nagraniach, ale każde nagranie będzie miało inny wewnętrzny identyfikator spotkania. Jeden identyfikator spotkania zewnętrznego jest powiązany z jednym lub wieloma identyfikatorami spotkań wewnętrznych.

Lista nagrań

$ bbb-record --list

wyświetli listę wszystkich Twoich nagrań.

Lista ostatnich nagrań

$ bbb-record --list-recent

wyświetli listę 10 najnowszych nagrań.

Lista przepływów pracy

Wyświetla listę włączonych kroków przetwarzania nagrywania i dostępnych skryptów przetwarzania. Może to dostarczyć cennych informacji na wypadek, gdybyś próbował zdiagnozować, dlaczego nagrania nie są przetwarzane w określonym formacie.

$ bbb-record --list-workflows

## Enabled recording processing steps:
#
## archive
## sanity
## captions
## process:presentation
## publish:presentation
#
## Available processing scripts:
#
## presentation

Oglądaj nagrania

$ bbb-record --watch

Wyświetla listę 10 najnowszych nagrań, odświeżając dane wyjściowe co 2 sekundy. Gdy BigBlueButton przetwarza nagranie, zobaczysz aktualizacje postępu z usług działających w tle.

Every 2.0s: bbb-record --list-recent
Internal MeetingID                   Time   APVD APVDE RAS Slides Processed Published Ext. Meeting ID
------------------------------------------- ---- ----- --- ------ --------- --------- ---------------
29173583...1508b2efd7-1647630316965  Mar 18  X    XX X XX      7  pres.     pres.     English 102
6e35e3b2...f5db637d7a-1538942881350  Oct 7   X    X  X         6            pres.     English 101
9e468g2k...hij43b5d8b-1538941988186  Oct 7  XX   XX  X         9            pres.     Demo Meeting

--
0 timers listed.
--
● bbb-rap-starter.service - BigBlueButton recording processing starter
   Loaded: loaded (/usr/lib/systemd/system/bbb-rap-starter.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-03-01 18:27:19 CET; 2 weeks 0 days ago
 Main PID: 3509 (rap-starter.rb)
    Tasks: 2 (limit: 4915)
   CGroup: /bbb_record_core.slice/bbb-rap-starter.service
           └─3509 /usr/bin/ruby /usr/local/bigbluebutton/core/scripts/rap-starter.rb

● bbb-rap-resque-worker.service - BigBlueButton resque worker for recordings
   Loaded: loaded (/usr/lib/systemd/system/bbb-rap-resque-worker.service; enabled)
   Active: active (running) since Tue 2022-03-01 18:27:19 CET; 2 weeks 0 days ago
 Main PID: 3847 (sh)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/bbb-rap-resque-worker.service
           ├─ /usr/bin/rake -f ../Rakefile resque:workers >> /var/log/bigbluebutton/bbb-rap-worker.log
           ├─ /usr/bin/ruby /usr/bin/rake -f ../Rakefile resque:workers
           └─ Waiting for rap:archive,rap:publish,rap:process,rap:sanity,rap:captions,rap:events
--

Odbuduj nagranie

Ta opcja powoduje, że nagranie przechodzi ponownie przez fazy przetwarzania i publikowania.

Jeśli uruchomisz bbb-record --rebuild na nagraniu, w którym nie uruchomiono skryptów przetwarzania i publikowania, ponieważ moderator sesji nie kliknął przycisku nagrywania, wymusi to przetworzenie spotkania, o ile surowe pliki będą nadal dostępne, a record ustawiono na true. W takim przypadku w nagraniu zostanie uwzględniony cały czas trwania spotkania.

$ sudo bbb-record --rebuild 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965

Odbuduj każde nagranie

Ta opcja przechodzi ponownie przez fazy przetwarzania i publikowania dla każdego nagrania na serwerze. W rezultacie zakończenie może zająć dużo czasu.

$ sudo bbb-record --rebuildall

Usuń spotkanie i jego nagranie

Usuwa dane spotkania (takie jak przesłane pliki) i jego nagranie.

$ sudo bbb-record --delete 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965

Ostrzeżenie — powoduje to również usunięcie bieżących spotkań! Aby usunąć tylko jedno opublikowane nagranie i jego nieprzetworzone dane, usuń

  • /var/bigbluebutton/recording/raw/<meetingId>
  • /var/bigbluebutton/published/presentation/<meetingId>

Usuń wszystkie spotkania i ich nagrania

Usuwa wszystkie dane związane ze spotkaniami (takie jak przesłane pliki) i ich nagrania.

$ sudo bbb-record --deleteall

Ostrzeżenie — powoduje to również usunięcie bieżących spotkań! Aby usunąć tylko opublikowane nagrania i ich surowe dane, usuń wszystkie wpisy w obszarze

  • /var/bigbluebutton/recording/raw/
  • /var/bigbluebutton/published/

Debuguj nagrania

Sprawdź pliki dziennika nagrań, szukając błędów od fazy archiwizacji.

$ sudo bbb-record --debug

Sprawdź konfigurację nagrywania

Sprawdź, czy w BigBlueButton 2.5 i nowszych wersjach nie ma błędów konfiguracyjnych, które mogą uniemożliwiać prawidłowe działanie usługi nagrywania, np. sprawdzanie uprawnień i własności.

$ sudo bbb-record --check

Włącz przepływ pracy

$ sudo bbb-record --enable presentation

Wyłącz przepływ pracy

$ sudo bbb-record --disable presentation

Uzyskaj identyfikatory spotkań wewnętrznych

$ sudo bbb-record --tointernal "English 102"

pokaże

Internal meeting ids related to the given external meeting id:
-------------------------------------------------------------
29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965

Użyj cudzysłowu w identyfikatorze spotkania zewnętrznego.

Uzyskaj identyfikatory spotkań zewnętrznych

$ sudo bbb-record --toexternal 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965
External meeting id related to the given internal meeting id:
-------------------------------------------------------------
English 102" meetingName="English 102
-------------------------------------------------------------

Opublikuj ponownie nagrania

Opublikuj ponownie nagrania.

$ sudo bbb-record --republish 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965

Dla programistów

Tutaj znajdziesz więcej szczegółów na temat skryptów nagrywania i odtwarzania.

Aby rozpocząć rejestrowaną sesję w BigBlueButton, należy ustawić wartość parametru „record” na „true” w wywołaniu create API, które zwykle jest obsługiwane przez oprogramowanie innych firm.

Faza przechwytywania

Faza przechwytywania jest obsługiwana przez wiele komponentów.

Aby zrozumieć, jak to działa, należy posiadać podstawową, średniozaawansowaną lub zaawansowaną wiedzę na temat narzędzi takich jak FreeSWITCH, Flex, Red5 i Redis. Jeśli masz więcej pytań, zajrzyj do kodu źródłowego BigBlueButton i poszukaj informacji na liście mailingowej BigBlueButton dla programistów.

Archiwizuj, sprawdzaj poprawność, przetwarzaj i publikuj

Te fazy są obsługiwane przez skrypty Ruby. Katalog tych plików to /usr/local/bigbluebutton/core/

/usr/local/bigbluebutton/core/
├── Gemfile
├── Gemfile.lock
├── Rakefile
├── lib
│   ├── boot.rb
│   ├── custom_hash.rb
│   ├── recordandplayback
│   │   ├── edl
│   │   │   ├── audio.rb
│   │   │   └── video.rb
│   │   ├── edl.rb
│   │   ├── events_archiver.rb
│   │   ├── generators
│   │   │   ├── audio.rb
│   │   │   ├── audio_processor.rb
│   │   │   ├── captions.rb
│   │   │   ├── events.rb
│   │   │   ├── presentation.rb
│   │   │   └── video.rb
│   │   ├── workers
│   │   │   ├── archive_worker.rb
│   │   │   ├── base_worker.rb
│   │   │   ├── captions_worker.rb
│   │   │   ├── events_worker.rb
│   │   │   ├── process_worker.rb
│   │   │   ├── publish_worker.rb
│   │   │   └── sanity_worker.rb
│   │   └── workers.rb
│   └── recordandplayback.rb
└── scripts
    ├── README
    ├── archive
    │   └── archive.rb
    ├── bbb-0.9-beta-recording-update
    ├── bbb-0.9-recording-size
    ├── bbb-1.1-meeting-tag
    ├── bigbluebutton.yml
    ├── caption
    │   └── presentation
    ├── cleanup.rb
    ├── post_archive
    │   └── post_archive.rb.example
    ├── post_events
    │   ├── post_events.rb.example
    │   └── post_events_analytics_callback.rb
    ├── post_process
    │   └── post_process.rb.example
    ├── post_publish
    │   ├── post_publish.rb.example
    │   ├── post_publish_recording_ready_callback.rb
    ├── presentation.yml
    ├── process
    │   ├── README
    │   └── presentation.rb
    ├── publish
    │   ├── README
    │   └── presentation.rb
    ├── rap-caption-inbox.rb
    ├── rap-enqueue.rb
    ├── rap-process-worker.rb
    ├── rap-starter.rb
    ├── sanity
    │   └── sanity.rb
    └── utils
        ├── captions.rb
        ├── gen_poll_svg
        └── gen_webvtt

Główny plik to rap-worker.rb, wykonuje wszystkie fazy nagrywania i odtwarzania.

  1. Wykrywa, kiedy dostępne są nowe multimedia przechwycone z sesji.

  2. Przejdź przez fazę Archiwum (/usr/local/bigbluebutton/core/scripts/archive/archive.rb)

  3. Przejdź przez fazę Sanity wykonując (/usr/local/bigbluebutton/core/scripts/sanity/sanity.rb)

  4. Przejdź przez fazę procesu, wykonując wszystkie skrypty pod /usr/local/bigbluebutton/core/scripts/process/

  5. Przejdź przez fazę publikowania, wykonując wszystkie skrypty pod /usr/local/bigbluebutton/core/scripts/publish/

  • Pliki kończące się na „archiver.rb” zawierają skrypty z logiką do archiwizacji multimediów.

  • Pliki pod /usr/local/bigbluebutton/core/lib/generators/ zawierają skrypty z logiką, klasami i metodami używanymi przez inne skrypty archiwizujące lub przetwarzające media.

  • pliki .yml zawierają informacje wykorzystywane przez proces i skrypty publikujące.

Pisanie post-skryptów

Na twoim serwerze istnieją osobne katalogi „drop-in” pod /usr/local/bigbluebutton/core/scripts dla każdego z post_archive, post_process i Stopnie post_publish. Każdy z tych katalogów może zawierać skrypty Ruby (wymagane rozszerzenie .rb), które zostaną uruchomione w kolejności alfabetycznej po odpowiednim kroku nagrywania.

Skrypty przyjmują jako parametr argument -m, identyfikator spotkania, oraz -f, nazwę formatu wywołującego skrypt.

Dostarczono zestaw przykładowych skryptów, które stanowią podstawę do tworzenia własnych skryptów.

|-- post_archive
|   `-- post_archive.rb.example
|-- post_process
|   `-- post_process.rb.example
`-- post_publish
    `-- post_publish.rb.example

Przykładowe pliki podają ścieżki plików, w których znajdują się pliki z odpowiedniego kroku i zawierają kod umożliwiający dostęp do zmiennych metadanych ze spotkania. Na przykład, jeśli przekazałeś zmienną o nazwie

meta_postpublishemail=user@example.com

podczas tworzenia spotkania możesz uzyskać do niego dostęp wykonując

email = meeting_metadata['postpublishemail']

w skrypcie.

W post-skryptach możesz robić, co chcesz, łącznie z modyfikowaniem plików nagrań z poprzedniego kroku, zanim nastąpi następny krok.

Faza odtwarzania

Odtwarzanie współpracuje z bbb-playback, samodzielną aplikacją React korzystającą z odtwarzacza multimedialnego Video.js. Slajdy z adnotacjami, podpisami, czatem, kursorem, wynikami ankiet, udostępnieniami biurka i kamerami internetowymi są wyświetlane zgodnie z bieżącym czasem odtwarzania pliku audio. Pliki odtwarzania znajdują się w /var/bigbluebutton/playback/presentation/ i służą do odtwarzania wszelkich opublikowanych nagrań.

Ręczne wykonywanie skryptów nagrywania

Jeśli zamierzasz tworzyć skrypty nagrywania, ręczne uruchomienie ich przez każdy z etapów RaP umożliwi Ci ulepszenie istniejących przepływów pracy lub dodanie nowych. Poniższy przykład opiera się na formacie prezentacji.

Najpierw zatrzymaj usługę nagrywania i utwórz wymagane katalogi tymczasowe:

systemctl stop bbb-rap-starter
systemctl stop bbb-rap-resque-worker
mkdir -p ~/temp/log/presentation ~/temp/recording/{process,publish,raw} ~/temp/recording/status/{recorded,archived,processed,sanity} ~/temp/published

Następnie edytuj ~/dev/bigbluebutton/record-and-playback/core/scripts/bigbluebutton.yml i skomentuj katalogi PRODUCTION, usuwając komentarz do folderów DEVELOPMENT. Ścieżka powinna odpowiadać tym utworzonym powyżej.

## For PRODUCTION
## log_dir: /var/log/bigbluebutton
events_dir: /var/bigbluebutton/events
## recording_dir: /var/bigbluebutton/recording
## published_dir: /var/bigbluebutton/published
captions_dir: /var/bigbluebutton/captions
## playback_host: develop.distancelearning.cloud
playback_protocol: https

## For DEVELOPMENT
## This allows us to run the scripts manually
scripts_dir: /home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts
log_dir: /home/ubuntu/temp/log
recording_dir: /home/ubuntu/temp/recording
published_dir: /home/ubuntu/temp/published
playback_host: 127.0.0.1

Teraz utwórz nagranie za pomocą BigBlueButton. Po zakończeniu sesji w /var/bigbluebutton/recording/status/recorded powinien znajdować się plik <meeting-id>.done. Zanotuj najnowszy identyfikator spotkania wewnętrznego, ponieważ użyjemy go do poinformowania naszych skryptów, które nagranie ma przetworzyć.

Przed uruchomieniem skryptów musimy się upewnić, że ścieżki w naszych skryptach są poprawnie ustawione. W swoim środowisku programistycznym (~/dev/bigbluebutton/record-and-playback) edytuj

  • /core/scripts/archive/archive.rb
  • /core/scripts/sanity/sanity.rb
  • prezentacja/scripts/process/presentation.rb
  • prezentacja/scripts/publish/presentation.rb
  • prezentacja/scripts/presentation.yml

i upewnij się, że skrypty używają DEVELOPMENT PATH. Musimy to zrobić, aby skrypt mógł znaleźć bibliotekę podstawową.

## For DEVELOPMENT
## Allows us to run the script manually
require File.expand_path('../../../../core/lib/recordandplayback', __FILE__)

## For PRODUCTION
## require File.expand_path('../../../lib/recordandplayback', __FILE__)
## For PRODUCTION
## publish_dir: /var/bigbluebutton/published/presentation
video_formats:
- webm
## - mp4

## For DEVELOPMENT
publish_dir: /home/ubuntu/temp/published/presentation

Teraz uruchamiamy krok archiwizacji. Przejdź do record-and-playback/core/scripts i wpisz

ruby archive/archive.rb -m <meeting-id>

Jeśli wszystko poszło dobrze, powinieneś mieć teraz surowe pliki w ~/temp/recording/raw/<meeting-id>. Możesz także sprawdzić logi pod adresem ~/temp/log/archive-<meeting-id>.log i mieć wpis .done w ~/temp/recording/status/archived.

Teraz musimy sprawdzić poprawność, aby upewnić się, że nieprzetworzone nagrania są kompletne. Ponownie w folderze skryptów wpisz

ruby sanity/sanity.rb -m <meeting-id>

Potwierdź, że wszystko poszło zgodnie z oczekiwaniami, sprawdzając dzienniki ~/temp/log/sanity.log i , że Wpis .done w ~/temp/recording/status/sanity istnieje.

Zakładając, że nagranie przeszło kontrolę poprawności, czas go przetworzyć.

Ustaw ścieżkę skryptu generowania napisów:

## ret = BigBlueButton.exec_ret('utils/gen_webvtt', '-i', raw_archive_dir, '-o', target_dir)
ret = BigBlueButton.exec_ret(
   '/home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts/utils/gen_webvtt',
   ...)

Teraz skrypt przetwarzania prezentacji może działać bez zgłaszania błędu.

cd ~/dev/bigbluebutton/record-and-playback/presentation/scripts
ruby process/presentation.rb -m <meeting-id>

Możesz monitorować postęp, śledząc dziennik pod adresem ~/temp/log/presentation/process-<meeting-id>.log.

Jeśli wszystko poszło dobrze, możemy teraz uruchomić skrypt publikowania. Musimy jednak trochę oszukać. Skrypt publikowania będzie szukał pliku processing_time, który zawiera informacje o tym, jak długo trwało przetwarzanie . Niestety plik ten jest tworzony przez skrypt rap-worker.rb, którego nie uruchamiamy.

Utwórz ręcznie plik pod adresem

vi ~/temp/recording/process/presentation/<meeting-d>/processing_time,

zapisując go po wpisaniu dowolnego numeru (np. 46843).

Następnie ponownie należy zaktualizować ścieżkę do narzędzia generowania ankiety:

#ret = BigBlueButton.exec_ret('utils/gen_poll_svg', ...)
ret = BigBlueButton.exec_ret(
   '/home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts/utils/gen_webvtt',
   ...)

Na koniec uruchom skrypt publikowania:

ruby publish/presentation.rb -m <meeting-id>-presentation

Zauważ, że do identyfikatora spotkania dołączyliśmy słowo „prezentacja”, co poinformuje skrypt o konieczności opublikowania w formacie „prezentacja”.

Uruchamianie nagrywania i odtwarzania jako usługi

Możesz wdrożyć swoje zmiany, uruchamiając deploy.sh i ponownie uruchamiając usługi związane z nagrywaniem:

systemctl restart bbb-rap-starter
systemctl restart bbb-rap-resque-worker

deploy.sh nie instaluje odtwarzaczy dla nagrań wykonanych za pomocą BigBlueButton 0.81 i 0.9. Jeśli potrzebujesz ich na serwerze deweloperskim, zbuduj i zainstaluj pakiet bbb-playback-presentation-legacy (build/setup.sh bbb-playback-presentation-legacy), zgodnie z opisem w odtwórz nagrania wykonane za pomocą BigBlueButton 0.81 lub 0.9.

Wdrażanie innych formatów

Po uruchomieniu deploy.sh, domyślnie ustawi się tylko przepływ pracy prezentacji. Możliwe jest jednak dodanie innych formatów, takich jak wideo, udostępnianie ekranu itp. Aby to zrobić, wystarczy zmienić deploy_format "presentation" w skrypcie deploy.sh, dodając dowolne formaty, więc w przypadku video i screenshare będzie to:

deploy_format "presentation video screenshare"

Kolejną adaptacją umożliwiającą wdrożenie innych formatów jest wykonanie kroków opisanych w dodatkowych formatach nagrywania, aby włączyć nowe, właśnie ustawione przepływy pracy. Na przykład w Twoim bigbluebutton.yml możesz mieć:

steps:
  archive: 'sanity'
  sanity: 'captions'
  captions:
    - 'process:presentation'
    - 'process:video'
  'process:presentation': 'publish:presentation'
  'process:video': 'publish:video'

W końcu, jeśli ustawiasz inny format nagrywania po raz pierwszy, być może będziesz musiał ponownie załadować nginx oprócz innych poleceń wspomnianych wcześniej w tej sekcji, na przykład:

systemctl restart bbb-rap-starter
systemctl restart bbb-rap-resque-worker
systemctl reload nginx

Jeśli nie zmieniasz plików nginx dla każdego formatu, ponowne ładowanie nginx przy każdym uruchomieniu deploy.sh nie jest obowiązkowe.

Rozwiązywanie problemów

Oprócz polecenia

$ sudo bbb-record --debug

Możesz użyć wyjścia z

$ sudo bbb-record --watch

, aby wykryć problemy z nagraniami.

Począwszy od BBB 2.5,

$ sudo bbb-record --check

dodatkowo uruchomi narzędzie do diagnostyki nagrywania z kontrolą uprawnień i własności, które może być pomocne w sytuacjach, gdy przetwarzanie nagrywania nie rozpoczyna się.

Aby zbadać przetwarzanie konkretnego nagrania, możesz przejrzeć następujące pliki dziennika:

Dziennik bbb-rap-worker to ogólny plik dziennika, którego można użyć do sprawdzenia, która część przetwarzania nagrania nie działa. Rejestruje również wiadomość, jeśli proces nagrywania zostanie pominięty, ponieważ moderator nie nacisnął przycisku nagrywania.

/var/log/bigbluebutton/bbb-rap-worker.log

Aby zbadać błąd dotyczący konkretnego nagrania, sprawdź następujące pliki dziennika:

/var/log/bigbluebutton/archive-<recordingid>.log
/var/log/bigbluebutton/<workflow>/process-<recordingid>.log
/var/log/bigbluebutton/<workflow>/publish-<recordingid>.log

Ponowne uruchomienie usług związanych z nagrywaniem może również pomóc:

systemctl restart bbb-rap-starter
systemctl restart bbb-rap-resque-worker

Omówienie danych wyjściowych z bbb-record --watch

watch

Ta sekcja ma pomóc Ci znaleźć i rozwiązać problemy w komponencie Nagrywanie i odtwarzanie BigBlueButton, obserwując wynik polecenia

$ bbb-record --watch
RAS (ZAPISANE – Zarchiwizowane – SPRAWDZONE POPRAWNOŚĆ)

Poniżej RAS nie zobaczysz żadnego X aż do zakończenia spotkania.

Po zakończeniu spotkania pod R powinien pojawić się znak X. Jeśli tak nie jest, upewnij się, że:

  • wszyscy użytkownicy opuścili spotkanie.

  • parametr meetingExpireWhenLastUserLeftInMinutes w /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties nie jest ustawiony na dużą wartość (domyślnie jest to 1).

  • w wywołaniu API create przekazany został parametr record=true; w przeciwnym razie spotkanie nie zostało nagrane.

Po zarchiwizowaniu nagrania pod A powinien pojawić się znak X. W przeciwnym razie sprawdź, czy:

  • Istnieje następujący plik:

/var/bigbluebutton/recording/status/recorded/<internal meeting id>.done

co oznacza, że ​​spotkanie zostało nagrane.

Gdy nagranie pomyślnie przejdzie kontrolę poprawności, pod S powinien pojawić się symbol X. Jeżeli tak się nie stanie,

  • Plik multimedialny nie został poprawnie zarchiwizowany. Znajdź przyczynę problemu w dzienniku poprawności
$ grep <internal meeting id> /var/log/bigbluebutton/sanity.log
APVD (audio, prezentacja, wideo, udostępnianie pulpitu)

Ta sekcja dotyczy nagranych multimediów. Domyślnie nagrywany jest dźwięk i prezentacja. Jeśli nie widzisz żadnego X pod V lub D, oznacza to, że albo nie udostępnił swojej kamery internetowej lub pulpitu, albo nie włączyłeś możliwości ich nagrywania.

APVDE (audio, prezentacja, wideo, udostępnianie pulpitu, wydarzenia)

Ta sekcja dotyczy zarchiwizowanych multimediów. Jeśli nie widzisz X pod multimediami, co do których masz pewność, że zostały nagrane, sprawdź dziennik poprawności . Wykonaj to polecenie, aby znaleźć problem:

$ grep <internal meeting id> /var/log/bigbluebutton/sanity.log
Przetworzone

Jeżeli do przetworzenia Twojego nagrania zastosowano skrypt, jego nazwa powinna być wyświetlona w kolumnie „Przetworzone”. Domyślnie powinieneś zobaczyć 'prezentację', jeśli nie widzisz żadnej z nich, znajdź problem w pliku logu przetworzonego nagrania:

$ grep -B 3 "status: 1" /var/log/bigbluebutton/presentation/process-<internal meeting id>.log | grep ERROR

Następnie powinien zostać wyświetlony problem. Jeśli nie ma danych wyjściowych, prześledź plik, aby zobaczyć, które zadanie zostało wykonane jako ostatnie. Komunikat o błędzie opisuje problem.

Opublikowano

Jeśli do publikacji Twojego nagrania zastosowano skrypt, jego nazwa powinna być wymieniona w kolumnie „Opublikowane”.

$ grep -B 3 "status: 1" /var/log/bigbluebutton/presentation/publish-<internal meeting id>.log | grep ERROR

Następnie powinien zostać wyświetlony problem. Jeśli nie ma danych wyjściowych, prześledź plik, aby zobaczyć, które zadanie zostało wykonane jako ostatnie. Komunikat o błędzie opisuje problem.

Często zadawane pytania

Jak zmienić znaczniki rozpoczęcia/zakończenia nagrywania?

Uwaga: W BigBlueButton 2.6.9 wprowadziliśmy zmianę, która zapewnia, że ​​domyślnie pliki multimedialne nie będą zapisywane w pliku, chyba że spotkanie jest aktywnie nagrywane. Jeśli używasz BigBlueButton 2.6.9 lub nowszego, poniższe instrukcje będą działać tylko wtedy, gdy ustawisz recordFullDurationMedia=true w /etc/bigbluebutton/bbb-web.properties.

W scenariuszu, w którym użytkownik zapomniał nacisnąć przycisk Start/Stop nagrywania po 30 minutach sesji, co spowodowało brak początkowego segmentu odtwarzania, jego zawartość nadal może zostać uwzględniona poprzez edycję interwałów do przetworzenia w pliku events.xml.

Najpierw użyj bbb-record --list, aby znaleźć wewnętrzny meetingId do nagrania. Na przykład, aby uzyskać trzy ostatnie nagrania, wykonaj

$ sudo bbb-record --list | head -n 5

Internal MeetingID                   Time   APVD APVDE RAS Slides Processed Published Ext. Meeting ID
------------------------------------------- ---- ----- --- ------ --------- --------- ---------------
29173583...1508b2efd7-1647630316965  Mar 18  X    XX X XX      7  pres.     pres.     English 102
6e35e3b2...f5db637d7a-1538942881350  Oct 7   X    X  X         6            pres.     English 101
6e35e3b2...f5db637d7a-1538941988186  Oct 7  XX   XX  X         6            pres.     English 101

Pierwsze nagranie ma wewnętrzny meetingID 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965. Jeśli to jest przekodowanie, które chcesz edytować, w lokalizacji /var/bigbluebutton/recording/raw/29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965/events.xml znajdziesz events.xml. Edytuj ten plik i poszukaj pierwszego RecordingStatusEvent, takiego jak:

<event timestamp="7610895212" module="PARTICIPANT" eventname="RecordStatusEvent">
   <timestampUTC>1647630325790</timestampUTC>
   <date>2022-03-18T20:05:25.790+01</date>
   <status>true</status>
   <userId>w_j0ke0updyniq</userId>
</event>

Następnie sprawdź, kiedy dołączył pierwszy moderator, a następnie przenieś RecordStatusEvent po dołączeniu moderatora. Zmień także timestamp na RecordStatusEvent, tak aby wystąpiło po timestamp moderatora. Na przykład:

<event timestamp="7610890308" module="PARTICIPANT" eventname="ParticipantJoinEvent">
    <name>User 8828229</name>
    <timestampUTC>1647630320886</timestampUTC>
    <role>MODERATOR</role>
    <date>2022-03-18T20:05:20.886+01</date>
    <externalUserId>w_j0ke0updyniq</externalUserId>
    <userId>w_j0ke0updyniq</userId>
</event>

<event timestamp="7610890309" module="PARTICIPANT" eventname="RecordStatusEvent">
    <timestampUTC>1647630325790</timestampUTC>
    <date>2022-03-18T20:05:25.790+01</date>
    <status>true</status>
    <userId>w_j0ke0updyniq</userId>
</event>

Odpowiada to kliknięciu przez pierwszego moderatora przycisku Rozpocznij/Zatrzymaj nagrywanie. Zapisz zmodyfikowany events.xml i wygeneruj ponownie nagranie za pomocą komendy bbb-record --rebuild, jak w

$ sudo bbb-record --rebuild 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965

Jeżeli nie ma innego przetwarzania nagrań, powinieneś zobaczyć ponowne przetwarzanie nagrania za pomocą komendy sudo bbb-record --watch. Po zakończeniu przetwarzania użytkownicy będą mogli obejrzeć nagranie i całą zawartość od momentu dołączenia pierwszego moderatora.

Czy nagrywanie włącza się automatycznie?

Nie. Podczas tworzenia spotkania parametry API muszą zawierać record=true, aby umożliwić nagrywanie. Surowe pliki całego spotkania są następnie zapisywane na serwerze i przycinane według formatu prezentacji zgodnie ze znacznikami Start/Stop znajdującymi się w events.xml w celu odtwarzania.

W BigBlueButton 0.9.1, aby nagrana sesja utworzyła plik do odtwarzania, moderator musi kliknąć przycisk Rozpocznij/Zatrzymaj nagrywanie podczas sesji. W przeciwnym razie BigBlueButton nie utworzy pliku odtwarzania i nie usunie nagranej sesji.

Jak usunąć nagrania, zanim urządzenie magazynujące się zapełni?

/etc/cron.daily/bigbluebutton usuwa zarchiwizowane multimedia. Edytuj plik i dodaj więcej reguł, jeśli chcesz usunąć inne, takie jak pliki nieprzetworzone lub przetworzone.

Zarys zdarzeń

Przegląd

Poniższe sekcje opisują typy zdarzeń, które napotkasz w events.xml (w przypadku, gdy chcesz je przeanalizować za pomocą własne skrypty).

Czat

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
Wydarzenie PublicChat - znacznik czasuUTC - nadawcaId - data - wiadomość

Uczestnik

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
Przypisz wydarzenie prezentera - nazwa - znacznik czasuUTC - identyfikator użytkownika - przypisanyBy - data
UczestnikDołączWydarzenie - nazwa - znacznik czasuUTC - rola - data externalUserID - identyfikator użytkownika
EndAndKickAllEvent - znacznik czasuUTC - powód - data
RecordStatusZdarzenie - znacznik czasuUTC - data -status -userId
UczestnikStatusZmianaZdarzenie - znacznik czasuUTC - status - userId - data - wartość
UkładBroadcastedEvent - znacznik czasuUTC - skupionaKamera - prezentacjaVideoRate - data - pozycja kamery - prezentacjaIsOpen - układ - isZmiana rozmiaru

LayoutBroadcastedEvent — emitowane po aktualizacji układu spotkania.

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Atrybut Wpisz Opis
znacznik czasuUTC Ciąg Znacznik czasu UTC wydarzenia
data Ciąg Data wydarzenia
układ Ciąg Aktywny układ. Obecnie zawsze UNIFIED_LAYOUT w BigBlueButton 4.0.
Pozycja kamery Ciąg Położenie stacji dokującej aparatu. Jeden z contentTop, contentRight, contentBottom, contentLeft, sidebarContentBottom
prezentacjaWideoOcena Pływak Liczba od 0 do 1 wskazująca stosunek rozmiaru stacji dokującej aparatu do rozmiaru okna
prezentacjaJestOtwarta Wartość logiczna Czy powierzchnia prezentacji jest otwarta
skupionaKamera Ciąg Identyfikator kamery, na której aktualnie ustawiona jest ostrość
isZmiana rozmiaru Wartość logiczna Czy prezenter aktywnie zmienia rozmiar układu

Prezentacja

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
Zdarzenie zakończone konwersją - oryginalna nazwa pliku - sygnatura czasowaUTC - nazwa prezentacji - podId -share - data
ResizeAndMoveSlideEvent - znacznik czasuUTC - xOffset - nazwa prezentacji - podId - wysokośćRatio - id - data - yOffset - współczynnik szerokości
UdostępnijPrezentacjaWydarzenie - znacznik czasuUTC - nazwa prezentacji - podId - udział - data
GotoSlideEvent - znacznik czasuUTC - nazwa prezentacji - podId - id - slajd - data
Utwórz wydarzeniePodPresentationPodEvent - currentPresenter - znacznik czasuUTC - podID - data
Ustaw prezentację do pobrania - znacznik czasuUTC - nazwa prezentacji - podId - data - do pobrania
SetPresentarInPodEvent - znacznik czasuUTC - podId - date - nextPresenterId

Tablica

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
AddShapeEvent (kształt) - znacznik czasuUTC - kolor - grubość - id - adte - biała tablicaId - wypełnienie - status - numer strony - pozycja - userId - dataPoints - type - shapeId - prezentacja
AddShapeEvent (tekst) - x - znacznik czasuUTC - y -fontColor - calcedFontSize - textBoxWidth - id - date - whiteboardId - status - numer strony - rozmiar czcionki - pozycja - userId - dataPoints - typ - kształtID
AddShapeEvent (ankieta) - liczba_responderów - status - userId - wynik - whiteboardId - pozycja - num_respondents - id - numer strony - prezentacja - dataPoints - znacznik czasuUTC - data - typ ankiety - type - identyfikator kształtu
CofnijZdarzenieAnnotacji - znacznik czasuUTC - data - tablicaID - numer strony - userId - kształtId - prezentacja
WhiteboardCursorMoveEvent - znacznik czasuUTC - xOffset - data - tablicaId - numer strony - userId - yOffset - prezentacja

Głos

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
Rozpocznij nagrywanieZdarzenie - mostek - znacznik czasuUTC - nazwa pliku - data - znacznik czasu nagrania
UczestnikDołączyłWydarzenie - uczestnik - znacznik czasu UTC - most - nazwa dzwoniącego - rozmawiający - numer dzwoniącego - data - wyciszony
UczestnikRozmowaWydarzenie - uczestnik - znacznik czasuUTC - most - rozmawia - data
UczestnikMutedZdarzenie - uczestnik - znacznik czasuUTC - most - data - wyciszony
UczestnikLeftZdarzenie - uczestnik - znacznik czasuUTC - most - data

Podkładki (do wspólnych notatek i podpisów)

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
Zdarzenie PadCreated - znacznik czasuUTC - data - padId

Współdzielenie pulpitu

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
DeskshareStartedEvent - plik - strumień
DeskshareStoppedEvent - plik - czas trwania
DeskShareStartRTMP - znacznik czasuUTC - startIstreamPathndex - data
DeskShareStopRTMP - znacznik czasuUTC - startIstreamPathndex - data
StartWebRTCDesktopShareEvent - znacznik czasuUTC - nazwa pliku - identyfikator spotkania
StartWebRTCDesktopShareEvent - znacznik czasuUTC - nazwa pliku - identyfikator spotkania

Zewnętrzne wideo

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
StartExternalVideoRecordEvent - znacznik czasuUTC - data - zewnętrznyURLWideo
AktualizujZdarzenieExternalVideoRecord - stawka - znacznik czasuUTC - stan - data - status - czas
StopExternalVideoRecordEvent

Sonda

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
AnkietaRozpoczętaRekordZdarzenie - secretPoll - znacznik czasuUTC - pollId - data - typ - pytanie - odpowiedzi
Użytkownik odpowiedział na wydarzeniePollRecordEvent
AnkietaZatrzymanaRekordZdarzenie - znacznik czasuUTC - pollId - data
AnkietaOpublikowanaRekordWydarzenie - numResponders - numRespondents - znacznik czasuUTC - pollId - data - pytanie - odpowiedzi

Kamera internetowa

Tabela jest szersza od ekranu. Przewiń ją w poziomie.

Wydarzenie Atrybuty
StartKamera internetowaUdostępnijZdarzenie - strumień
Zatrzymaj kamerę internetowąUdostępnij wydarzenie - strumień - czas trwania
StartWebRTCShareEvent - znacznik czasuUTC - nazwa pliku - identyfikator spotkania
StopWebRTCShareEvent - znacznik czasuUTC - nazwa pliku - identyfikator spotkania
SpotkanieKonfiguracjaZdarzenie - znacznik czasuUTC - data - kamery internetoweOnlyForModerator