Gerenciar a reprodução de vídeo

Os controles de reprodução cumprem com as normas do RTSP e com a Especificação de Transmissão ONVIF (https://www.onvif.org/profiles/specifications/).

Resumo da gravação

Você pode obter uma visão geral de todos os vídeos gravados disponíveis no dispositivo usando o comando GetRecordingSummary . Isso não é necessário, mas fornece informações úteis antes de realizar uma pesquisa.

Você pode usar GetRecordingSummary e/ou GetMediaAttributes para obter o carimbo de data/hora da primeira e da última gravação, mas primeiro você deve habilitar a configuração Usar configurações de câmeras no Milestone Open Network Bridge plug-in no XProtect Management Client.

Use configuration from cameras check box in the Open Network Bridge Information pane.

Gere um proxy para o serviço RecordingSearchusando o ponto final retornado pelo GetServices. Gere objetos de solicitação e resposta, em seguida, chame GetRecordingSummary.

SearchBindingProxy searchProxy( &soapSearch );

std::string searchEndpoint = "http://" + host + "/onvif/recording_search_service";

_tse__GetRecordingSummary tse__GetRecordingSummary;

_tse__GetRecordingSummaryResponse tse__GetRecordingSummaryResponse;

result = searchProxy.GetRecordingSummary( searchEndpoint.c_str(), NULL,

   &tse__GetRecordingSummary, &tse__GetRecordingSummaryResponse );

Pesquisar gravações

O método do serviço de pesquisa FindRecordings inicia uma pesquisa assíncrona na câmera. FindRecordings retorna um token que faz referência aos resultados da pesquisa. Mesmo que exista apenas uma gravação disponível, uma pesquisa é a maneira correta de obter uma referência para essa gravação.

Envie uma solicitação FindRecordings com os seguintes parâmetros obrigatórios:

  • SearchScope > IncludedSources > Token – você deve fornecer o token GUID da câmera
  • SearchScope > RecordingInformationFilter – string com os seguintes parâmetros:
    • timestamp (em formato UTC)
    • maxTimeBefore (o tempo antes da marcação de tempo solicitada, em milissegundos)
    • maxCountBefore (o número máximo de faixas antes da marcação de tempo solicitada)
    • maxTimeAfter (o tempo após a marcação de tempo solicitada, em milissegundos)
    • maxCountAfter (o número máximo de faixas após a marcação de tempo solicitada)

Por exemplo:

boolean(//Track[TrackType = “Video”]),2016-12-06T08:07:43Z,99999999,20,99999999,20

Você receberá uma resposta com um SearchToken, que é exclusivo para os critérios de pesquisa.

Passe o SearchToken para GetRecordingSearchResults e você receberá uma lista com todas as faixas correspondentes ao critério de pesquisa.

Iniciando a reprodução

Quando estiver visualizando uma reprodução de vídeo, a velocidade padrão é 1 (reprodução normal na direção de avanço).

A reprodução é iniciada por meio do método Reprodução do RTSP. Um intervalo pode ser especificado. Se nenhum intervalo for especificado, o fluxo é reproduzido do início até o final ou, se o fluxo for pausado, é retomado do ponto em que foi parado. Neste exemplo, "Intervalo: npt=3-20" instrui o servidor de RTSP para iniciar a reprodução a partir do terceiro segundo até o 20º segundo.

Por exemplo:

PLAY rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373 RTSP/1.0

CSeq: 123

Session: 12345678

Require: onvif-replay

Range: npt=3-20

Rate-Control: no

Reprodução em recuo

Os dispositivos ONVIF PODEM suportar a reprodução em recuo. A reprodução em recuo é indicada utilizando o campo da plataforma Escala com um valor negativo. Por exemplo, para reproduzir em recuo sem perda de dados, um valor de -1,0 seria usado.

O Milestone Open Network Bridgesuporta os valores [-32 : 32].

PLAY rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373 RTSP/1.0

CSeq: 123

Session: 12345678

Require: onvif-replay

Range: clock=20090615T114900.440Z

Rate-Control: no

Scale: -1.0

Mudança de velocidade

A velocidade é controlada pela plataforma do Controle de Frequência do RTSP. Se "Controle de Frequência=sim", então o servidor está no controle da velocidade de reprodução. O fluxo é entregue em tempo real usando os mecanismos de temporização padrão do RTP. Se "Controle de Frequência=Não", então o cliente está no controle da velocidade de reprodução. A reprodução com frequência controlada normalmente será utilizada apenas por não clientes ONVIF específicos porque eles não irão especificar "Controle de Frequência=Não".

Para controlar a velocidade da reprodução em um cliente, use os controladores fornecidos. Por exemplo, com o media player VLC, selecione Reprodução > Velocidade > Mais rápido ou Mais lento. Isso aumenta ou diminui a velocidade em 0,5.

Fim mais rápido e Fim mais lento alteram a velocidade em 0,25.

Gerenciar a reprodução do media player VLC com entradas na linha de comando

Você pode gerenciar a reprodução de vídeos no media player VLC usando linhas de comando. Consulte Ajuda da linha de comando VLC (https://wiki.videolan.org/VLC_command-line_help/) para obter detalhes.

Estes comandos permitem, por exemplo, inverter a reprodução e alterar a hora de início da reprodução.

Um exemplo típico de uma linha de comando:

>vlc.exe --rate=-1.0 --start-time=3600 "rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373"

Onde:

  • Frequência é o parâmetro de escala e velocidade
  • Hora de início são os segundos após o início do banco de dados

A seguir, estão os controles de reprodução para media player VLC:

Código

O que posso conseguir com o código?

entrada-repetir=

<integer [-2147483648 .. 2147483647]>

Repetições de entrada

Número de vezes que a mesma entrada será repetida

start-time=

<float>

Hora de início

O fluxo vai começar nesta posição (em segundos)

stop-time=

<float>

Hora do fim

O fluxo irá parar nesta posição (em segundos)

run-time=

<float>

Tempo de execução

O fluxo será executado nesta duração (em segundos)

busca-rápida-pela-entrada

nenhuma-busca-rápida-pela-entrada

Busca rápida (padrão desativado)

Favorecer a velocidade sobre a precisão durante a busca

rate=

<float>

Vel. de reprodução

Isto define a velocidade de reprodução (a velocidade nominal é de 1,0)

input-list=

<string>

Lista de entrada

Você pode dar uma lista de entradas separadas por vírgula que serão concatenadas juntas após a normal

input-slave=

<string>

Entrada escravo (experimental)

Isto permite a reprodução a partir de várias entradas ao mesmo tempo. Este recurso é experimental, nem todos os formatos são suportados. Use uma lista de entradas separadas por '#'