libclosedcaption 1.0.3
Extração de closed caption ISDB-Tb/SBTVD de arquivos MPEG-TS
Carregando...
Procurando...
Nenhuma entrada encontrado
Referência do Arquivo ts-reader.h

Leitura de arquivos MPEG-TS, pacote a pacote. Mais...

#include "caption-common.h"
Gráfico de dependência de inclusões para ts-reader.h:
Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com esse arquivo:

Ir para o código-fonte desse arquivo.

Definições e Macros

#define TS_PACKET_SIZE   188
 
#define TS_SYNC_BYTE   0x47
 

Definições de Tipos

typedef struct TsReader_s TsReader_t
 

Enumerações

enum  TsReaderError_t { TS_READER_OK = 0 , TS_READER_ERROR_OPEN , TS_READER_ERROR_FORMAT , TS_READER_ERROR_MEMORY }
 

Funções

bool ts_detect_packet_format (const uint8_t *buf, size_t len, size_t *packet_size, size_t *offset)
 
TsReader_t * ts_reader_open (const char *filename, TsReaderError_t *error)
 
const uint8_t * ts_reader_next (TsReader_t *reader)
 
size_t ts_reader_get_packet_size (const TsReader_t *reader)
 
void ts_reader_close (TsReader_t *reader)
 

Descrição detalhada

Leitura de arquivos MPEG-TS, pacote a pacote.

Autor
Jorge Pereira jpere.nosp@m.iran.nosp@m.@gmai.nosp@m.l.co.nosp@m.m

O leitor detecta automaticamente o formato do arquivo e entrega sempre pacotes de TS_PACKET_SIZE bytes, prontos para o ts_demux_push().

Formatos aceitos:

  • 188 bytes: MPEG-TS padrão;
  • 192 bytes: M2TS (4 bytes de timecode antes de cada pacote);
  • 204 bytes: MPEG-TS com 16 bytes de Reed-Solomon no final de cada pacote, comum em capturas de ISDB-T.

Quando o sincronismo é perdido (byte TS_SYNC_BYTE fora do lugar), o leitor procura o próximo TS_SYNC_BYTE e continua a partir dele.

Exemplo:

TsReader_t *reader = ts_reader_open ("video.ts", &error);
const uint8_t *packet;
if (reader == NULL)
return;
while ((packet = ts_reader_next (reader)) != NULL)
ts_demux_push (demux, packet);
ts_reader_close (reader);
void ts_demux_push(TsDemux_t *demux, const uint8_t *packet)
const uint8_t * ts_reader_next(TsReader_t *reader)
struct TsReader_s TsReader_t
Definição ts-reader.h:57
TsReaderError_t
Definição ts-reader.h:47
void ts_reader_close(TsReader_t *reader)
TsReader_t * ts_reader_open(const char *filename, TsReaderError_t *error)

Definição no arquivo ts-reader.h.

Definições e macros

◆ TS_PACKET_SIZE

#define TS_PACKET_SIZE   188

Tamanho de um pacote MPEG-TS, sem bytes extras de timecode ou Reed-Solomon.

Definição na linha 39 do arquivo ts-reader.h.

◆ TS_SYNC_BYTE

#define TS_SYNC_BYTE   0x47

Byte de sincronismo que inicia todo pacote MPEG-TS.

Definição na linha 42 do arquivo ts-reader.h.

Definições dos tipos

◆ TsReader_t

typedef struct TsReader_s TsReader_t

Leitor de arquivo MPEG-TS. Estrutura opaca, criada por ts_reader_open().

Definição na linha 57 do arquivo ts-reader.h.

Enumerações

◆ TsReaderError_t

Erros retornados por ts_reader_open().

Enumeradores
TS_READER_OK 

Arquivo aberto com sucesso.

TS_READER_ERROR_OPEN 

Não foi possível abrir o arquivo; o motivo está em errno.

TS_READER_ERROR_FORMAT 

O arquivo não parece ser um MPEG-TS (188, 192 ou 204 bytes).

TS_READER_ERROR_MEMORY 

Falha ao alocar memória.

Definição na linha 47 do arquivo ts-reader.h.

Funções

◆ ts_detect_packet_format()

bool ts_detect_packet_format ( const uint8_t *  buf,
size_t  len,
size_t *  packet_size,
size_t *  offset 
)

Detecta o formato dos pacotes a partir do início de um buffer.

São necessários pelo menos 3 pacotes consecutivos com o byte de sincronismo no lugar certo para que o formato seja reconhecido.

Parâmetros
bufInício do conteúdo do arquivo.
lenQuantidade de bytes em buf (recomendado: 1024 ou mais).
packet_sizeRecebe o tamanho do pacote: 188, 192 ou 204.
offsetRecebe a posição do TS_SYNC_BYTE dentro do pacote (4 para M2TS, 0 para os demais).
Retorna
TRUE se o formato foi reconhecido.

◆ ts_reader_open()

TsReader_t * ts_reader_open ( const char *  filename,
TsReaderError_t *  error 
)

Abre um arquivo MPEG-TS para leitura.

Parâmetros
filenameCaminho do arquivo.
errorOpcional (pode ser NULL). Recebe o motivo da falha.
Retorna
O leitor, ou NULL em caso de erro. Liberar com ts_reader_close().

◆ ts_reader_next()

const uint8_t * ts_reader_next ( TsReader_t *  reader)

Lê o próximo pacote do arquivo.

Parâmetros
readerLeitor criado por ts_reader_open().
Retorna
Ponteiro para os TS_PACKET_SIZE bytes do pacote (já sem o timecode do M2TS e sem o Reed-Solomon), ou NULL no final do arquivo. O ponteiro só é válido até a próxima chamada.

◆ ts_reader_get_packet_size()

size_t ts_reader_get_packet_size ( const TsReader_t *  reader)

Informa o tamanho dos pacotes no arquivo.

Parâmetros
readerLeitor criado por ts_reader_open().
Retorna
188, 192 ou 204 bytes.

◆ ts_reader_close()

void ts_reader_close ( TsReader_t *  reader)

Fecha o arquivo e libera o leitor.

Parâmetros
readerLeitor criado por ts_reader_open(). Aceita NULL.