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-demux.h

Demultiplexador MPEG-TS: tabelas PAT/PMT, estatísticas por PID e remontagem dos pacotes PES de um PID. Mais...

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

Ir para o código-fonte desse arquivo.

Estruturas de Dados

struct  TsPidInfo_t
 

Definições e Macros

#define TS_PID_PAT   0x0000
 
#define TS_PID_NULL   0x1fff
 
#define TS_PID_MAX   0x2000
 
#define TS_PID_NONE   0xffff
 

Definições de Tipos

typedef void(* TsDemuxPesCallback_t) (const uint8_t *pes, size_t len, void *userdata)
 
typedef struct TsDemux_s TsDemux_t
 

Funções

TsDemux_t * ts_demux_new (void)
 
void ts_demux_free (TsDemux_t *demux)
 
void ts_demux_set_pes_callback (TsDemux_t *demux, uint16_t pid, TsDemuxPesCallback_t callback, void *userdata)
 
void ts_demux_push (TsDemux_t *demux, const uint8_t *packet)
 
void ts_demux_flush (TsDemux_t *demux)
 
const TsPidInfo_t * ts_demux_get_pid_info (const TsDemux_t *demux, uint16_t pid)
 
uint16_t ts_demux_get_caption_pid (const TsDemux_t *demux)
 
const char * ts_demux_describe_pid (const TsDemux_t *demux, uint16_t pid, char *buf, size_t len)
 
const char * ts_stream_type_name (uint8_t stream_type)
 
const char * ts_component_tag_name (int16_t component_tag)
 
const char * ts_system_pid_name (uint16_t pid)
 

Descrição detalhada

Demultiplexador MPEG-TS: tabelas PAT/PMT, estatísticas por PID e remontagem dos pacotes PES de um PID.

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

O demux recebe os pacotes TS de 188 bytes (veja ts-reader.h) e:

  • conta os pacotes de cada PID;
  • lê a PAT e as PMTs de todos os programas, identificando o tipo de cada PID (vídeo, áudio, legenda, PCR, etc.);
  • sugere o PID da legenda, a partir do component_tag da PMT;
  • remonta os pacotes PES de um PID escolhido e entrega cada PES completo para uma callback (por exemplo, caption_screen_push_pes()).

Exemplo:

static void
on_pes (const uint8_t *pes, size_t len, void *userdata)
{
caption_screen_push_pes (userdata, pes, len);
}
TsDemux_t *demux = ts_demux_new ();
ts_demux_set_pes_callback (demux, 0x3ed, on_pes, screen);
while ((packet = ts_reader_next (reader)) != NULL)
ts_demux_push (demux, packet);
ts_demux_free (demux);
bool caption_screen_push_pes(CaptionScreen_t *screen, const uint8_t *pes, size_t len)
void ts_demux_free(TsDemux_t *demux)
void ts_demux_flush(TsDemux_t *demux)
struct TsDemux_s TsDemux_t
Definição ts-demux.h:82
void ts_demux_set_pes_callback(TsDemux_t *demux, uint16_t pid, TsDemuxPesCallback_t callback, void *userdata)
TsDemux_t * ts_demux_new(void)
void ts_demux_push(TsDemux_t *demux, const uint8_t *packet)
const uint8_t * ts_reader_next(TsReader_t *reader)

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

Definições e macros

◆ TS_PID_PAT

#define TS_PID_PAT   0x0000

PID da PAT (Program Association Table).

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

◆ TS_PID_NULL

#define TS_PID_NULL   0x1fff

PID dos pacotes nulos (stuffing).

Definição na linha 45 do arquivo ts-demux.h.

◆ TS_PID_MAX

#define TS_PID_MAX   0x2000

Quantidade de PIDs possíveis (13 bits).

Definição na linha 48 do arquivo ts-demux.h.

◆ TS_PID_NONE

#define TS_PID_NONE   0xffff

Valor utilizado para indicar "nenhum PID".

Definição na linha 51 do arquivo ts-demux.h.

Definições dos tipos

◆ TsDemuxPesCallback_t

typedef void(* TsDemuxPesCallback_t) (const uint8_t *pes, size_t len, void *userdata)

Callback chamada para cada PES completo do PID escolhido em ts_demux_set_pes_callback().

Parâmetros
pesPacote PES completo, a partir do packet_start_code_prefix (00 00 01). Só é válido durante a chamada.
lenTamanho de pes em bytes.
userdataPonteiro informado em ts_demux_set_pes_callback().

Definição na linha 75 do arquivo ts-demux.h.

◆ TsDemux_t

typedef struct TsDemux_s TsDemux_t

Demultiplexador MPEG-TS. Estrutura opaca, criada por ts_demux_new().

Definição na linha 82 do arquivo ts-demux.h.

Funções

◆ ts_demux_new()

TsDemux_t * ts_demux_new ( void  )

Cria um demultiplexador.

Retorna
O demux, ou NULL se faltar memória. Liberar com ts_demux_free().

◆ ts_demux_free()

void ts_demux_free ( TsDemux_t *  demux)

Libera o demultiplexador. Não chama ts_demux_flush().

Parâmetros
demuxDemux criado por ts_demux_new(). Aceita NULL.

◆ ts_demux_set_pes_callback()

void ts_demux_set_pes_callback ( TsDemux_t *  demux,
uint16_t  pid,
TsDemuxPesCallback_t  callback,
void *  userdata 
)

Escolhe o PID cujos pacotes PES serão remontados e entregues à callback.

Apenas um PID é remontado por vez. Uma nova chamada substitui a anterior e descarta o PES que estava incompleto.

Parâmetros
demuxDemux criado por ts_demux_new().
pidPID a ser remontado, ou TS_PID_NONE para desligar.
callbackFunção chamada para cada PES completo.
userdataRepassado para a callback.

◆ ts_demux_push()

void ts_demux_push ( TsDemux_t *  demux,
const uint8_t *  packet 
)

Processa um pacote TS.

Pacotes com o transport_error_indicator ligado são ignorados. Pacotes perdidos (falha no continuity_counter) descartam o PES incompleto.

Parâmetros
demuxDemux criado por ts_demux_new().
packetPacote de TS_PACKET_SIZE bytes, iniciando em TS_SYNC_BYTE.

◆ ts_demux_flush()

void ts_demux_flush ( TsDemux_t *  demux)

Entrega o último PES, caso ainda esteja pendente.

Um PES só é considerado completo quando o próximo começa ou quando atinge o PES_packet_length; por isso, chame esta função no final do arquivo.

Parâmetros
demuxDemux criado por ts_demux_new().

◆ ts_demux_get_pid_info()

const TsPidInfo_t * ts_demux_get_pid_info ( const TsDemux_t *  demux,
uint16_t  pid 
)

Retorna as informações coletadas sobre um PID.

Parâmetros
demuxDemux criado por ts_demux_new().
pidPID entre 0 e TS_PID_MAX - 1.
Retorna
As informações do PID, ou NULL se pid for inválido.

◆ ts_demux_get_caption_pid()

uint16_t ts_demux_get_caption_pid ( const TsDemux_t *  demux)

Retorna o PID de legenda sugerido pela PMT.

É escolhido o stream privado (stream_type 0x06) com component_tag de legenda: 0x30 a 0x37 (full-seg) ou 0x87 (one-seg), dando preferência ao menor component_tag, ou seja, à legenda principal do full-seg.

Parâmetros
demuxDemux criado por ts_demux_new().
Retorna
O PID da legenda, ou TS_PID_NONE se nenhum foi encontrado.

◆ ts_demux_describe_pid()

const char * ts_demux_describe_pid ( const TsDemux_t *  demux,
uint16_t  pid,
char *  buf,
size_t  len 
)

Monta uma descrição legível do PID, por exemplo "0x06 PES privado (component_tag 0x30, legenda)".

Parâmetros
demuxDemux criado por ts_demux_new().
pidPID entre 0 e TS_PID_MAX - 1.
bufBuffer que recebe a descrição.
lenTamanho de buf (128 bytes são suficientes).
Retorna
O próprio buf.

◆ ts_stream_type_name()

const char * ts_stream_type_name ( uint8_t  stream_type)

Nome do stream_type da PMT (ISO/IEC 13818-1, Tabela 2-34).

Parâmetros
stream_typeValor do stream_type.
Retorna
O nome, por exemplo "H.264 video", ou "desconhecido".

◆ ts_component_tag_name()

const char * ts_component_tag_name ( int16_t  component_tag)

Nome do component_tag no ISDB-T (ARIB TR-B14 / ABNT NBR 15608).

Parâmetros
component_tagValor do component_tag.
Retorna
"legenda", "legenda one-seg", "superimpose", ou NULL para os demais valores.

◆ ts_system_pid_name()

const char * ts_system_pid_name ( uint16_t  pid)

Nome dos PIDs reservados para tabelas do sistema (PAT, NIT, SDT, EIT, etc.).

Parâmetros
pidPID a ser consultado.
Retorna
O nome da tabela, ou NULL se o PID não é reservado.