Kurento WebRTC не записывает

Я пытаюсь записать видео с помощью Kurento Media Server с nodejs. Я запускал пример hello-world здесь. Я подключил RecorderEndpoint к webrtcEndpoint и смог запустить все это, но я получаю это сообщение об ошибке на сервере:

0:37:59.122469563 7003 0xaf5500 ОШИБКА KurentoMediaPipelineImpl /build/buildd/kms-core-5.0.3/src/server/implementation/objects/MediaPipelineImpl.cpp:32:busMessage: Ошибка на шине: сообщение об ошибке: 0x7f11c0330ea0, время 99: 99:99.999999999, порядковый номер 514729, элемент 'kmsrecorderendpoint10', GstMessageError, gerror=(GError)NULL, debug=(string)"/build/buildd/kms-elements-5.0.3/src/gst-plugins/kmsrecorderendpoint. c(876):\sink_required_cb\ ():\ /GstPipeline:pipeline8/KmsRecorderEndpoint:kmsrecorderendpoint10";

Я не думаю, что он записывает правильно, но я не уверен, что не так. Я смог запустить исходный пример, поэтому с сервером все в порядке.

Код здесь:

https://gist.github.com/poliu2s/2cd3fc2a5dc929062481


person poliu2s    schedule 05.10.2014    source источник


Ответы (1)


Вам нужно исправить несколько проблем, прежде чем ваш код заработает должным образом. Я создал ответвление вашего кода и добавил некоторые модификации, которые вам необходимо включить, чтобы иметь возможность записывать поток WebRTC. Форк находится здесь. Кроме того, позволю себе несколько комментариев:

  1. Выбранный вами пример («Hello World») нельзя остановить (у него нет кнопки «Стоп» в графическом интерфейсе). Следовательно, вы не сможете остановить запись. Вы должны использовать более сложный пример с кнопками «Пуск» и «Стоп», чтобы вы могли остановить запись, чтобы получить доступ к сохраненному носителю и просмотреть его. Вероятно, вам следует лучше использовать учебник Magic Mirror в качестве отправной точки, потому что он использует WebSockets для сигнализации и позволяет остановить запись.
  2. Вы должны избегать условий гонки. В вашем коде вы используете rariable 'recorderEndpoint', который имеет состояние гонки, потому что он инициализируется в обратном вызове и используется в другом обратном вызове, оба обратных вызова выполняются параллельно и оба подвержены условиям гонки.

Редактировать: в примере действительно есть кнопка остановки, которая при нажатии освобождает конвейер и тем самым останавливает запись. Следовательно, комментарий 1 на самом деле не применим.

person lulop    schedule 05.10.2014
comment
Спасибо за классные комментарии! Попробовал, и это работает. В примере с приветствием также есть кнопка остановки, которая останавливает петлю, разве она не останавливает и запись? - person poliu2s; 05.10.2014
comment
Да, ты прав. Я не заметил, что у него есть кнопка остановки. Он освобождает конвейер, и при этом запись также останавливается. Таким образом, вы можете безопасно использовать этот пример. - person lulop; 06.10.2014