re publishing с query параметрами

Discussion in 'Web Call Server 5' started by LmSys, Mar 17, 2020.

  1. LmSys

    LmSys New Member

    После успешной публикации webrtc потока на флешфонер через апи запрашиваю пушить RTMP поток на необходимый мне сервер по такому то урлу с необходимыми мне параметрами
    Прим.
    rtmp://some.server.com/live/streamname?userId=14&foo=bar&hex=someHex

    Успешно получаю rtmp поток на сервере. Можно ли сделать тоже самое только через rtmp_push_auto_start.
    Т.е. паблишить на флешфонер /nameX?some=params что бы имя стрима на флешфонере было nameX, а на rtmp_push_auto_start_url передались необходимые аргументы ?some=params
  2. Max

    Max Administrator Staff Member

    Этот функционал - автоматическая републикация всех потоков - не предназначался для production (добавили уточнение в документации).
    "/nameX?some=param" - имя стрима будет nameX, но аргументы при ретрансляции не передадутся.
  3. Axel

    Axel New Member

    Было бы очень здорово передавать при ретрансляции и аргументы, так как, в нашем случае, аргументы содержат данные, необходимые для идентификации стримера и его авторизации, которые иначе как в URL не добавишь (для случая с типичным RTMP-паблишером вроде OBS).

    Вы пишете, что авторепаблишинг - не для продакшна. Можете подробнее объяснить, почему так? В случае авторепаблишинга сильно упрощается схема (push вместо pull), так как нет необходимости в третьей стороне, которая бы контролировала, что куда репаблишить, через API, ведь достаточно просто добавить пару строк в конфиг сервера.
  4. Max

    Max Administrator Staff Member

    Эта функция была добавлена для удобства тестирования RTMP push, и сама не отлаживалась. Например, с ней есть проблема с авторепубликацией WebRTC-потоков (WCS-1839).
    Добавили тикет WCS-2600, чтобы в будущем рассмотреть отладку для production.
  5. Max

    Max Administrator Staff Member

    Это возможно реализовать, если не использовать rtmp_push_auto_start. Если Вы используете REST hook для републикации потока с WCS на другой сервер, то можно пробросить параметры следующим образом:
    При публикации на WCS RTMP потока с параметрами в URL, например
    Code:
    rtmp://demo.flashphoner.com:1935/live/rtmp-test?param1=1&param2=2
    эти параметры приходят на бэкенд в REST hook /connect или /publishStream в поле custom, в нашем примере параметры придут в /publishStream
    Code:
    08:41:06,050 INFO            RestClient - API-ASYNC-pool-12-thread-12 SEND REST OBJECT ==>
    URL:http://localhost:8081/apps/EchoApp/publishStream
    OBJECT:
    {
      "nodeId" : "wSGzis0q1orY1bvoYYYxlvelw10pO65w@192.168.0.64",
      "appKey" : "flashStreamingApp",
      "sessionId" : "/192.168.0.65:33003/192.168.0.64:1935",
      "mediaSessionId" : "ff608338-2732-4992-9503-ed3335cc2482",
      "name" : "rtmp-test",
      ...
      "custom" : {
        "param1" : "1",
        "param2" : "2"
      }
    }
    
    Таким образом, Ваш бэкенд может сформировать URL для вызова /rest-api/push/startup, подставив необходимые параметры из поля custom, например
    Code:
    curl -H "Content-Type: application/json"-X POST http://WCS:8081/rest-api/push/startup -d '{"streamName":"rtmp-test","rtmpUrl":"rtmp://third-party-server:1935/live/rtmp-test?param1=1&param2=2"}'
    На WCS для этого должны быть установлены параметры
    Code:
    rtmp_transponder_full_url=true
    rtmp_transponder_stream_name_prefix=
    
    Такая схема, хоть несколько сложнее пары строчек в конфиге, но позволяет использовать push вместо pull и транслировать поток с параметрами из OBS на WCS
    Last edited: Mar 19, 2020
    Axel likes this.

Share This Page