Как изменить ответ SDP для записи звука только с Kurento?

Я могу записывать видео + аудио с помощью Kurento Media Server. У меня проблемы с записью аудиопотока. Из Как использовать kurento-media-server только для аудио stream? понимаете, что ответ SDP должен быть изменен.

В настоящее время я добавляю MediaStream только со звуковыми дорожками к PeerConnection. На стороне сервера перед отправкой ответа SDP я его модифицирую. Я пытался удалить

  1. что-либо ниже (включая) m=video
  2. что-либо ниже (включая) a=mid:video

В обоих случаях PeerConnection # signalingState на стороне браузера оставался в have-local-offer.

Что изменить в ответе SDP на то, что медиапоток начнет течь, а Куренто начнет записывать только аудиопоток?

Вот исходный ответ SDP (из которого было выполнено удаление) от WebRtcEndpoint # processoffer:

v=0
o=- 7750769884654864002 0 IN IP4 0.0.0.0
s=Kurento Media Server
c=IN IP4 0.0.0.0
t=0 0
a=group:BUNDLE audio video
m=audio 40192 RTP/SAVPF 111 0
c=IN IP4 10.0.2.15
a=rtpmap:111 opus/48000/2
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:40192 IN IP4 10.0.2.15
a=rtcp-mux
a=ssrc:4125152746 cname:user2534372120@host-b735c5b0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=mid:audio
a=ice-ufrag:SEV7
a=ice-pwd:BQyTSM0hvTJeqykFZovuBS
a=fingerprint:sha-256 E4:A1:25:2C:53:60:28:F5:C1:94:C6:32:E0:13:81:06:A6:66:77:00:52:C2:D9:93:AF:E4:A0:B3:4D:5C:9C:C3
a=candidate:1 1 UDP 2013266431 10.0.2.15 40192 typ host
a=candidate:2 1 UDP 2013266431 192.168.33.10 44816 typ host
m=video 40192 RTP/SAVPF 100
c=IN IP4 10.0.2.15
b=AS:500
a=rtpmap:100 VP8/90000
a=sendonly
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtcp:40192 IN IP4 10.0.2.15
a=rtcp-mux
a=ssrc:1769273725 cname:user2534372120@host-b735c5b0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=mid:video
a=ice-ufrag:SEV7
a=ice-pwd:BQyTSM0hvTJeqykFZovuBS
a=fingerprint:sha-256 E4:A1:25:2C:53:60:28:F5:C1:94:C6:32:E0:13:81:06:A6:66:77:00:52:C2:D9:93:AF:E4:A0:B3:4D:5C:9C:C3
a=candidate:1 1 UDP 2013266431 10.0.2.15 40192 typ host
a=candidate:2 1 UDP 2013266431 192.168.33.10 44816 typ host

РЕДАКТИРОВАТЬ:

После предложения от группы kurento google оказалось, что нет необходимости изменять SDP. По крайней мере, с Kurento 6. Я получил работу только со звуком (как с MediaStream только со звуком из браузера, так и с MediaStream с аудио + видео из браузера). Для этого (пример кода на Ruby):

  1. Укажите MediaProfileSpecType в RecorderEndpoint builderRecorderEndpoint::Builder.new(@pipeline, location).withMediaProfile(org.kurento.client.MediaProfileSpecType::WEBM_AUDIO_ONLY).build()
  2. Укажите MediaType при подключении конечной точки записывающего устройства (@source is WebRtcEndpoint): @source.connect(@recorder, org.kurento.client.MediaType::AUDIO)

person Madis Nõmme    schedule 15.07.2015    source источник


Ответы (2)


Здесь у вас есть разные варианты. Я предполагаю, что у вас есть webrtcEp и recoderEp

  • Отправлять аудио и видео с клиента, но записывать только видео: вы отправите и то, и другое, но вам нужно указать записывающему устройству хранить только звук.

    RecorderEndpoint recoderEp = new RecorderEndpoint.Builder(pipeline, "URI_HERE").withMediaProfile(MediaProfileSpecType.WEBM_AUDIO_ONLY).build();
    webrtcEp.connect(recorderEp, MediaProfile.AUDIO);
    
  • Отправлять только звук: установка для свойства video параметра getUserMediaoptions значения false должна отправлять только звук. Если это не так, это означает, что есть ошибка в согласовании конечной точки webrtc на медиа-сервере. У нас аналогичный сценарий, но только отправка видео, и он работает. Если этого не произошло, сообщите об этом, чтобы мы могли это исправить.

РЕДАКТИРОВАТЬ №1: В любом случае всегда удобно указать тип носителя, который будет записываться, или что две конечные точки будут обмениваться через метод подключения, поэтому то, что написано в первом маркере, применимо к обоим.

РЕДАКТИРОВАТЬ # 2 Вам обязательно нужно указать MediaProfileSpecType при создании рекордера

person igracia    schedule 16.07.2015
comment
Мне нужно выбрать второй вариант: запрос микрофона только от getUserMedia (т.е. ограничения {video: false, audio: true}), потому что пользователь может быть сбит с толку, когда он ожидает только аудиозвонок и запрашивается доступ к камере. И это похоже на ошибку в Kurento WebRtcEndpoint или RecorderEndpoint, потому что запись видео + аудио работает так же, как и только видео. При запросе только микрофона размер файла записи остается равным 0, и никаких ошибок не сообщается. Сообщит о проблеме в группу Google Kurento. - person Madis Nõmme; 16.07.2015
comment
Начато обсуждение ошибки в группе kurento google: groups.google.com/forum/ #! topic / kurento / iIxcmd76C4E - person Madis Nõmme; 16.07.2015
comment
В любом случае вам следует установить профиль мультимедиа в записывающем устройстве и подключиться к наиболее явному типу профиля мультимедиа в connectmethod. Вы это проверили? - person igracia; 16.07.2015
comment
Я сделал. Использовал MediaType.AUDIO только при отправке аудиопотока и пробовал использовать MediaType.AUDIO также при отправке видео + аудио из браузера. Ни в том, ни в другом случае не сработало - файл записи остался пустым. - person Madis Nõmme; 16.07.2015
comment
Хорошо, тогда похоже, что у нас есть ошибка в KMS5. Последнее, что нужно сделать, поскольку мы вчера выпустили новую версию (KMS6), - это проверить ее. Единственное, что вам нужно будет адаптироваться к просачиванию ICE. - person igracia; 16.07.2015
comment
Мы только что выпустили все это вчера, обучающие программы и все такое. Проверьте это и посмотрите, осталась ли у вас проблема. - person igracia; 17.07.2015
comment
@ MadisNõmme Вы пробовали это? Используется также MediaProfileSpecType? - person igracia; 03.08.2015
comment
Да, я это сделал, и он работает с Kurento 6. Я также добавил комментарий в ветку группы Google. groups.google.com/d/msg/kurento/iIxcmd76C4E/S6vNi4OKBAA > - person Madis Nõmme; 03.08.2015
comment
@ MadisNõmme Спасибо, я отредактировал сообщение, чтобы добавить информацию на основе этой темы, чтобы выделить профиль СМИ. Он уже был там, но, я думаю, не казался очевидным. - person igracia; 04.08.2015

Вы можете поставить порт видеопотока на ноль. Это должно указывать на то, что поток отклонен или отключен от дальнейшего использования во время сеанса.

m = видео 0 RTP / SAVPF 100

person Rajesh    schedule 16.07.2015
comment
После предложенного вами изменения PeerConnection # signalingState переходит в stable. Так что это улучшение. Тем не менее файл записи, созданный RecorderEndpoint, не получает никаких данных (остается нулевым размером). Есть ли у вас другие предложения? Есть ли способ наблюдать за ошибками, связанными с записью? Я попробовал RecorderEndpoint # addErrorListener, но id не сообщил ни о чем. - person Madis Nõmme; 16.07.2015
comment
На данный момент я думаю, что это больше связано с Kurento Stack, чем с чем-либо еще. В идеале это следует уважать. Если только они не забыли проверить условие для отключенного потока. Извини ... Ничего другого не могу придумать. - person Rajesh; 17.07.2015