browser - WEBRTC - wcs - RTSP - IPcam

OlegR

New Member
Добрый день!
Столкнулся со следующей ситуацией.
1. Создал приложение pzApp, с ссылкой на внешний по отношению к WCS веб-сервер nginx.
2. Добавил необходимые rest-методы в приложение.
3. Реализовал "заглушки" для методов на веб-сервере.
4. При подключении к WCS указываю приложение pzApp
Для WEBRTC работает приложение pzApp, но когда WCS поднимает RTSP-соединение с IP-камерой, используется приложение defaultApp. Все события по RTSP-соединению также используют defaultApp.

Необходимо чтобы RTSP-соединение тоже работало через pzApp.
 

Max

Administrator
Staff member
Добрый день.

Когда вы делаете попытку проиграть RTSP поток со страницы браузера, происходит следующее:
1. WCS сервер создает подключение к RTSP камере и публикует видеопоток сам на себя, как если бы использовалась веб-камера.
2. Браузер играет поток.

На первом шаге WCS сервер выполняет служебнное действие и указывает при подключении к самому себе defaultApp для публикации потока.
В данный момент этого нельзя изменить.

В результате, два метода будут вызваны с указанием defaultApp, это:
  1. publishStream
  2. StreamStatusEvent, PUBLISHING
Остальные методы, такие как: connect, ConnectionStatusEvent, play, StreamStatusEvent PLAYING будут вызваны уже на вашем сконфигурированном ключе pzApp.

Примеры:

18:23:05,972 INFO agerRemoteRmiService - RMI TCP Connection(1947)-192.168.88.59 SEND REST OBJECT ==>
URL:http://localhost:9091/EchoApp/publishStream
OBJECT:
{
"nodeId" : "heaG3zqlPt9M2YbWpSLbvPvckCzLNazN@192.168.88.59",
"appKey" : "defaultApp",
"sessionId" : "rtsp://str81.creacast.com/grandlilletv/low9e561a44-51c5-4244-9c3b-30352ab1dbc3",
"mediaSessionId" : "b951625c-40f4-47de-aac8-0aa18d874340",
"name" : "rtsp://str81.creacast.com/grandlilletv/low",
"published" : true,
"hasVideo" : false,
"hasAudio" : true,
"status" : "NEW",
"record" : false,
"width" : 0,
"height" : 0,
"bitrate" : 0,
"quality" : 0,
"mediaProvider" : "RTSP",
"history" : false
}
18:23:05,986 INFO agerRemoteRmiService - RMI TCP Connection(1947)-192.168.88.59 RECEIVED REST OBJECT <==
URL:http://localhost:9091/EchoApp/publishStream
OBJECT:
{
"nodeId" : "heaG3zqlPt9M2YbWpSLbvPvckCzLNazN@192.168.88.59",
"appKey" : "defaultApp",
"sessionId" : "rtsp://str81.creacast.com/grandlilletv/low9e561a44-51c5-4244-9c3b-30352ab1dbc3",
"mediaSessionId" : "b951625c-40f4-47de-aac8-0aa18d874340",
"name" : "rtsp://str81.creacast.com/grandlilletv/low",
"published" : true,
"hasVideo" : false,
"hasAudio" : true,
"status" : "NEW",
"record" : false,
"width" : 0,
"height" : 0,
"bitrate" : 0,
"quality" : 0,
"mediaProvider" : "RTSP",
"history" : false
}

18:23:06,044 INFO agerRemoteRmiService - RMI TCP Connection(1948)-192.168.88.59 SEND REST OBJECT ==>
URL:http://localhost:9091/EchoApp/StreamStatusEvent
OBJECT:
{
"nodeId" : "heaG3zqlPt9M2YbWpSLbvPvckCzLNazN@192.168.88.59",
"appKey" : "defaultApp",
"sessionId" : "rtsp://str81.creacast.com/grandlilletv/low9e561a44-51c5-4244-9c3b-30352ab1dbc3",
"mediaSessionId" : "b951625c-40f4-47de-aac8-0aa18d874340",
"name" : "rtsp://str81.creacast.com/grandlilletv/low",
"published" : true,
"hasVideo" : false,
"hasAudio" : true,
"status" : "PUBLISHING",
"audioCodec" : "mpeg4-generic",
"videoCodec" : "H264",
"record" : false,
"width" : 0,
"height" : 0,
"bitrate" : 0,
"quality" : 0,
"createDate" : 1520857385892,
"mediaProvider" : "RTSP",
"history" : false
}
18:23:06,073 INFO agerRemoteRmiService - RMI TCP Connection(1948)-192.168.88.59 RECEIVED REST OBJECT <==
URL:http://localhost:9091/EchoApp/StreamStatusEvent
OBJECT:
{
"nodeId" : "heaG3zqlPt9M2YbWpSLbvPvckCzLNazN@192.168.88.59",
"appKey" : "defaultApp",
"sessionId" : "rtsp://str81.creacast.com/grandlilletv/low9e561a44-51c5-4244-9c3b-30352ab1dbc3",
"mediaSessionId" : "b951625c-40f4-47de-aac8-0aa18d874340",
"name" : "rtsp://str81.creacast.com/grandlilletv/low",
"published" : true,
"hasVideo" : false,
"hasAudio" : true,
"status" : "PUBLISHING",
"audioCodec" : "mpeg4-generic",
"videoCodec" : "H264",
"record" : false,
"width" : 0,
"height" : 0,
"bitrate" : 0,
"quality" : 0,
"createDate" : 1520857385892,
"mediaProvider" : "RTSP",
"history" : false
}

Проверим есть ли возможность указывать вместо defaultApp тот же ключ, что передан при коннекте. Если есть, то оформим внутреннюю задачу для этого.
 

OlegR

New Member
Планировал при вызове REST-метода запускать PHP-скрипт, получать данные из БД и подменивать строку подключения к камере.
Как в таком случае передать WCS учетные данные из базы данных для подключения к IP-камере по RTSP минуя JS?
 

Max

Administrator
Staff member
Как в таком случае передать WCS учетные данные из базы данных для подключения к IP-камере по RTSP минуя JS?
Все правильно делаете.
Просто игнорируйте эти два события
1) publishStream
2) StreamStatusEvent PUBLISHING
а остальные события обрабатываете и можно подменять строку подключения к камере:
1) playStream (здесь подменяем строку подключения к камере)
2) StreamStatusEvent PLAYING - здесь просто нотификация.
 

OlegR

New Member
Добрый день!
Подмена строки подключения работает!
Прописал в connect
{
"restClientConfig":{
"playStream":{
"clientExclude":"",
"restExclude":"",
"restOnError":"LOG",
"restPolicy":"OVERWRITE",
"restOverwrite":"name"
}
}
}
Прописал в playStream
{
"name" : "rtsp://192.168.1.2/user=admin&password=&channel=1&stream=1?.sdp"
}
 
Top