Подмена mediaSessionId в API /publishStream

mrinner

Member
Сейчас заменяется "name" через REST API /publishStream - работает ок.
Захотелось сделать pre-save оригинального имени, и один из вариантов, заменить "mediaSessionId" на (orig name + timestamp) - при публикации потока через RTMP - работает, а вот WebRTC не стартует, приходит StreamStatusEvent() 'status': 'FAILED', 'info': 'Failed by ICE timeout'.

Может есть возможность при publishStream вернуть "custom" / "userCustom" object со своими параметрами, куда можно было бы записать что-либо?
 

Max

Administrator
Staff member
Добрый день.
mediaSessionId при публикации WebRTC потока генерируется на клиенте, поэтому его подмена и не работает.
Если Вам необходимо передать реальное имя потока на публикующий клиент, Вы можете использовать REST API вызов /rest-api/data/send следующим образом:
1) На бэкенде, при получении REST hook /connect, сохранить sessionId для каждого подключенного клиента
Code:
{
   "nodeId":"H4gfHeULtX6ddGGUWwZxhUNyqZHUFH8j@192.168.1.59",
   "appKey":"defaultApp",
   "sessionId":"/192.168.1.38:64604/192.168.1.59:8443-cb1f1fef-4c56-4958-a619-7932eede9f00",
   ...
}
2) При получении REST hook /publishStream отправить WCS REST API запрос /rest-api/data/send
Code:
POST /rest-api/data/send HTTP/1.1                                                            
Connection: keep-alive                                                                       
Content-Length: 188                                                                          
Content-Type: application/json                                                               
                                                                                             
{                                                                                            
    "nodeId": "",                                                                            
    "operationId": "",                                                                       
    "payload": {                                                                             
        "real_stream_name": "test"                                                           
    },                                                                                       
    "sessionId": "/192.168.1.38:64604/192.168.1.59:8443-cb1f1fef-4c56-4958-a619-7932eede9f00"
}
При этом на уровне WebSDK клиент получит событие SESSION_STATUS.APP_DATA, которое нужно обработать в JavaScript-коде клиента. Данные события будут содержать переданный payload
 

mrinner

Member
Max, спасибо.
Идея была сохранить real stream name в самой информации стрима, чтобы при рестарте нашего backend можно было вычитать текущие стримы из WCS и увидеть оригинальные имена.
 

Max

Administrator
Staff member
Добрый день.
В Вашем случае правильным подходом будет вести учет стримов в какой-либо БД, которую можно перечитать при рестарте бэкенда. После рестарта список стримов можно фильтровать в соответствии с результатами REST API запроса /stream/find_all
 
Top