Пробелма с getRecordInfo 5.2

Discussion in 'Web Call Server 5' started by Ras2607, Feb 10, 2020.

  1. Ras2607

    Ras2607 Member

    Здравствуйте!
    наконец-то нашли время обновиться до 5.2
    Но столкнулись с рядом неприятных моментов.
    На старой версии мы использовали stream.getRecordInfo() чтобы получить имя файла записи ДО его окончания.
    Вызывали при срабатывании STREAM_STATUS.PUBLISHING

    Ранее проблем никаких не было. После обновления эта функция, как и ряд других, например просто getInfo() выдают ошибку undefined.
    При этом если вызвать функцию при срабатывании STREAM_STATUS.UNPUBLISHED, то имя записи успешно возвращается.

    Обновили как серверную часть, так и подключаемый файл flashphoner.js

    Мы что-то не учли при обновлении или теперь эта возможность в принципе отсутствует?
  2. Max

    Max Administrator Staff Member

    Добрый день.
    В версии 5.2 существенно переработан механизм записи потоков, добавлены шаблоны {startTime}, {endTime}, {duration}, значения которых точно известны только по факту окончания записи. Поэтому stream.getRecordInfo() теперь возвращает имя файла после получения события STREAM_STATUS.UNPUBLISHED, т.е. после окончания записи. Если имя файла необходимо знать заранее (например, в браузере), шаблон должен быть сформирован таким образом, чтобы в него входили параметры потока, которые могут быть получены при помощи REST API, например
    Code:
    stream_record_policy_template={streamName}-{mediaSessionId}
    При этом идентификатор медиасессии mediaSessionId вы получаете запросом /rest-api/stream/find:
    Code:
    POST /rest-api/stream/find HTTP/1.1
    Host: 192.168.1.101:8081
    Content-Length: 40
    Content-Type: application/json
    
    {
      "name":"stream1",
      "published":true
    }
    
    Code:
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: application/json;charset=UTF-8
    
    [
     {
       "custom":{},
       "nodeId":null,
       "appKey":"defaultApp",
       "sessionId":"/192.168.1.102:34500/192.168.1.101:8080",
       "mediaSessionId":"4f112b20-13d0-11e7-b521-59a9cb7eddeb",
        ...
     }
    ]
    
  3. Ras2607

    Ras2607 Member

    Уже смогил сами получить имя файла через /rest-api/recorder/find_all
    Правда если запись дробится на части автоматически, то цифру приходится добавлять вручную, но в целом задача выполняется.
  4. Max

    Max Administrator Staff Member

    Да, можно и этот запрос использовать. Ограничение, действительно, одно: элементы, обеспечивающие уникальность при ротации (номер файла), а также элементы шаблона имени {endTime} и {duration} становятся известны только после окончания записи фрагмента, поэтому в имя, возвращаемое в запросе, не подставляются.
    Также отметим, что длительность фрагмента {duration} не вычисляется при записи VP8 потока (контейнер webm).

Share This Page