FMUSER Transmitir vídeo e áudio sem fio mais fácil!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albanês
ar.fmuser.org -> árabe
hy.fmuser.org -> armênio
az.fmuser.org -> Azerbaijão
eu.fmuser.org -> Basco
be.fmuser.org -> bielorrusso
bg.fmuser.org -> búlgaro
ca.fmuser.org -> catalão
zh-CN.fmuser.org -> Chinês (simplificado)
zh-TW.fmuser.org -> chinês (tradicional)
hr.fmuser.org -> croata
cs.fmuser.org -> checo
da.fmuser.org -> dinamarquês
nl.fmuser.org -> holandês
et.fmuser.org -> estoniano
tl.fmuser.org -> filipino
fi.fmuser.org -> finlandês
fr.fmuser.org -> francês
gl.fmuser.org -> galego
ka.fmuser.org -> georgiano
de.fmuser.org -> alemão
el.fmuser.org -> grego
ht.fmuser.org -> crioulo haitiano
iw.fmuser.org -> hebraico
hi.fmuser.org -> Hindi
hu.fmuser.org -> húngaro
is.fmuser.org -> islandês
id.fmuser.org -> indonésio
ga.fmuser.org -> irlandês
it.fmuser.org -> italiano
ja.fmuser.org -> Japonês
ko.fmuser.org -> coreano
lv.fmuser.org -> letão
lt.fmuser.org -> Lituano
mk.fmuser.org -> macedônio
ms.fmuser.org -> malaio
mt.fmuser.org -> maltês
no.fmuser.org - norueguês
fa.fmuser.org -> persa
pl.fmuser.org -> polonês
pt.fmuser.org -> português
ro.fmuser.org -> romeno
ru.fmuser.org -> russo
sr.fmuser.org -> Sérvio
sk.fmuser.org -> Eslovaco
sl.fmuser.org -> esloveno
es.fmuser.org -> espanhol
sw.fmuser.org -> Swahili
sv.fmuser.org -> sueco
th.fmuser.org -> Tailandês
tr.fmuser.org -> turco
uk.fmuser.org -> ucraniano
ur.fmuser.org -> Urdu
vi.fmuser.org -> vietnamita
cy.fmuser.org -> Galês
yi.fmuser.org -> iídiche
HLS e Http Live Streaming são protocolos para streaming em tempo real definidos pela Apple. O HLS é implementado com base no protocolo HTTP. O conteúdo da transmissão inclui duas partes, uma é o arquivo de descrição M3U8 e a outra é o arquivo de mídia TS.
1. Arquivo M3U8
O arquivo de mídia é descrito em texto, que é composto por uma série de tags.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: A primeira linha de cada arquivo M3U8 deve ser esta tag.
# EXT-X-TARGETDURATION: Especifique a duração máxima do segmento de mídia (segundos). O tempo especificado em #EXTINF deve ser menor ou igual a este valor máximo. Este valor só pode aparecer uma vez.
#EXTINF: Descreva o comprimento de um único arquivo de mídia. Seguem arquivos de mídia, como ./0.ts
2. arquivo ts
O arquivo ts é um arquivo de fluxo de transporte, o formato de codificação de vídeo principal é h264 / mpeg4 e o áudio é acc / MP3.
O arquivo ts é dividido em três camadas: fluxo de transporte da camada ts, fluxo elementar de pacotes da camada, fluxo elementar da camada es. A camada es são os dados de áudio e vídeo, e a camada pes são as informações de descrição do quadro de dados, como um carimbo de data / hora adicionado aos dados de áudio e vídeo. A camada ts serve para adicionar as informações necessárias para a identificação e transmissão do fluxo de dados na camada pes
Nota: os detalhes são os seguintes
(1) Camada ts O tamanho do pacote ts é fixado em 188 bytes e a camada ts é dividida em três partes: cabeçalho ts, campo de adaptação e carga útil. O cabeçalho ts é fixado em 4 bytes; o campo de adaptação pode ou não existir, e sua função principal é preencher dados com menos de 188 bytes; a carga útil são dados pes.
cabeçalho ts
sync_byte byte de sincronização 8b, fixado em 0x47
transport_error_indicator 1b Indicador de erro de transporte, indicando que há um byte inútil após o campo adapt do cabeçalho ts, geralmente 0, este byte é contado no comprimento do campo adapt
payload_unit_start_indicator 1b Indicador de início da unidade de carga, que é marcado como 1 no início de um pacote de dados completo
transport_priority 1b Prioridade de transporte, 0 é baixa prioridade, 1 é alta prioridade, geralmente 0
valor pid 13b pid
transport_scrambling_control 2b Controle de embaralhamento de transporte, 00 significa não criptografado
adaptação_field_control 2b Se deve incluir o campo de adaptação, '00' é reservado; '01' significa nenhum campo de adaptação, apenas a carga útil; '10' significa apenas o campo de adaptação, sem carga útil; '11' significa que a adaptação também está incluída. Domínio e carga útil.
continuity_counter 4b Contador crescente, de 0-f, o valor inicial não leva necessariamente 0, mas deve ser contínuo
O conteúdo da camada ts é identificado pelo valor PID e o conteúdo principal inclui: tabela PAT, tabela PMT, fluxo de áudio e fluxo de vídeo. Para analisar o fluxo ts, você deve primeiro encontrar a tabela PAT, contanto que você encontre o PAT, você pode encontrar o PMT e então você pode encontrar os fluxos de áudio e vídeo. O valor PID da tabela PAT é fixado em 0. A tabela PAT e a tabela PMT precisam ser inseridas no fluxo ts regularmente, porque o usuário pode ingressar no fluxo ts a qualquer momento, este intervalo é relativamente pequeno, geralmente a cada poucos quadros de vídeo para adicionar PAT e PMT. As tabelas PAT e PMT são necessárias, e outras tabelas como SDT (tabela de descrição de serviço) também podem ser adicionadas, mas o fluxo hls pode ser reproduzido desde que haja PAT e PMT.
Tabela PAT: Tem como função principal indicar o valor PID da tabela PMT.
Tabela PMT: Sua função principal é especificar o valor PID do fluxo de áudio e vídeo.
Fluxo de áudio / fluxo de vídeo: carregue conteúdo de áudio e vídeo.
adaptação
adaptação_field_length 1B comprimento do campo de adaptação, o número de bytes atrás
sinalizador 1B leva 0x50 para indicar PCR ou 0x40 para não incluir PCR
PCR 5B Program Clock Reference, referência de relógio do programa, usado para recuperar o relógio de tempo do sistema STC (System Time Clock) consistente com o codificador.
stuffing_bytes xB stuffing bytes, o valor é 0xff
O comprimento da área de adaptação deve incluir um byte identificado pelo indicador de erro de transmissão. pcr é a referência do relógio do programa, pcr, dts, pts são todos valores amostrados do mesmo relógio do sistema, pcr é incremental, portanto, pode ser definido como valor dts, os dados de áudio não precisam de pcr. Se não houver campo, o ipad pode tocar, mas vlc não pode jogar. Ao empacotar o fluxo ts, as tabelas PAT e PMT não possuem um campo de adaptação. Se o comprimento não for suficiente, basta preencher 0xff. Tanto o fluxo de vídeo quanto o fluxo de áudio precisam adicionar um campo de adaptação, que geralmente é adicionado ao primeiro pacote ts e ao último pacote ts de um quadro, e o pacote ts do meio não é adicionado.
Formato PAT
table_id 8b PAT tabela é fixada em 0x00
section_syntax_indicator 1b é fixado em 1
zero 1b é fixado em 0
2b reservado é fixado em 11
section_length 12b O comprimento dos seguintes dados
transport_stream_id 16b ID do fluxo de transporte, fixado como 0x0001
2b reservado é fixado em 11
version_number 5b Número da versão, fixado em 00000, se o PAT mudar, o número da versão aumentará em 1
current_next_indicator 1b é fixado em 1, indicando que esta tabela PAT pode ser usada, se for 0, aguarde a próxima tabela PAT
section_number 8b é fixado em 0x00
last_section_number 8b é fixado em 0x00
Iniciar loop
program_number 16b Quando o número do programa é 0x0000, significa que é NIT, quando o número do programa é 0x0001, significa que é PMT
3b reservado é fixado em 111
PID 13b Valor PID correspondente ao conteúdo do número do programa
Loop final
CRC32 32b Código de verificação CRC32 dos dados anteriores
Formato PMT
table_id 8b tabela PMT tem qualquer valor, 0x02
section_syntax_indicator 1b é fixado em 1
zero 1b é fixado em 0
2b reservado é fixado em 11
section_length 12b O comprimento dos seguintes dados
program_number 16b channel number, o que significa o canal associado ao PMT atual, o valor é 0x0001
2b reservado é fixado em 11
version_number 5b Número da versão, fixado em 00000, se o PAT mudar, o número da versão aumentará em 1
current_next_indicator 1b é fixado em 1
section_number 8b é fixado em 0x00
last_section_number 8b é fixado em 0x00
3b reservado é fixado em 111
PCR_PID 13b O PID do pacote TS onde o PCR (clock de referência do programa) está localizado, designado como o PID de vídeo
4b reservado é fixado em 1111
program_info_length 12b As informações de descrição do programa, designadas como 0x000, significa que não
Iniciar loop
stream_type 8b Tipo de fluxo, marca é vídeo ou áudio ou outros dados, a codificação h.264 corresponde a 0x1b, a codificação aac corresponde a 0x0f, a codificação mp3 corresponde a 0x03
3b reservado é fixado em 111
elementary_PID 13b PID correspondente a stream_type
4b reservado é fixado em 1111
ES_info_length 12b Descrição da informação, designada como 0x000 significa não
Loop final
CRC32 32b Código de verificação CRC32 dos dados anteriores
(2) camada pes
A camada pes adiciona carimbo de data / hora e outras informações a cada quadro de vídeo / áudio. O pacote pes contém muito conteúdo, e deixamos apenas os mais comumente usados.
pes start code 3B start code, fixado em 0x000001
valor de áudio 1B de id de stream (0xc0-0xdf), geralmente 0xc0
Valor de vídeo (0xe0-0xef), geralmente 0xe0
comprimento do pacote pes 2B O comprimento dos dados pes atrás, 0 significa comprimento ilimitado,
Apenas o comprimento dos dados de vídeo excederá 0xffff
A sinalização 1B geralmente assume o valor 0x80, o que significa que os dados não são criptografados, não têm prioridade e são dados com backup
Sinalizador 1B valor 0x80 significa apenas pts, valor 0xc0 significa pts e dts
pes data length 1B O comprimento dos seguintes dados, o valor é 5 ou 10
valor pts 5B 33 bits
valor dts 5B 33 bits
pts é o timestamp de exibição e dts é o timestamp de decodificação. Ambos os carimbos de data / hora são necessários para dados de vídeo. Os pts e dts dos dados de áudio são iguais, portanto, apenas os pts são necessários. Existem dois carimbos de data / hora, pts e dts, que são causados por quadros B. Os pts dos quadros I e P são iguais a dts. Se um vídeo não tiver quadros B, pts sempre será o mesmo que dts. Leia os quadros de vídeo sequencialmente do arquivo, e a seqüência dos quadros extraídos é igual à seqüência dts. O algoritmo dts é relativamente simples, o valor inicial + incremento é suficiente, o cálculo de pts é mais complicado e o deslocamento precisa ser adicionado ao dts.
Existem apenas pts nos pes de áudio (o mesmo que dts), os quadros I e P do vídeo devem ter ambos os carimbos de data / hora e o quadro B do vídeo precisa apenas de pts (o mesmo que dts). Para empacotar pts e dts, você precisa saber o tipo de quadro de vídeo, mas não podemos julgar o tipo de quadro pelo formato do contêiner. Você deve analisar o conteúdo h.264 para obter o tipo de quadro.
por exemplo:
IPBBBP
Ordem de leitura: 1 2 3 4 5 6
pedido dts: 1 2 3 4 5 6
pedido de pts: 1 5 3 2 4 6
Algoritmo de dts de vídeo sob demanda:
dts = valor inicial + 90000 / video_frame_rate, o valor inicial pode ser especificado arbitrariamente, mas é melhor não tomar 0, video_frame_rate é a taxa de quadros, como 23, 30.
pts e dts são baseados na escala de tempo, escala de tempo 1s = 90000, um quadro deve ser escala de tempo 90000 / video_frame_rate.
A divisão da escala de tempo de um quadro pela frequência de amostragem pode ser convertida para a duração da reprodução de um quadro
Algoritmo dts de áudio sob demanda:
dts = valor inicial + (90000 * audio_samples_per_frame) / audio_sample_rate, o valor de audio_samples_per_frame está relacionado ao codec, o valor de aac é 1024, o valor de mp3 é 1158, audio_sample_rate é a taxa de amostragem, como 24000, 41000. AAC decodifica um quadro de 1024 amostras por canal, o que significa que a duração de um quadro é de 1024 / sample_rate segundos. Portanto, o carimbo de data / hora de cada quadro é 0, 1024 / sample_rate, ..., 1024 * n / sample_rate segundos.
Os dts e pts do vídeo ao vivo devem usar diretamente o tempo no fluxo de dados ao vivo e não devem ser calculados por fórmulas.
(3) camada es
A camada es refere-se aos dados de áudio e vídeo, apresentamos apenas vídeo h.264 e áudio aac.
vídeo h.264:
Para empacotar os dados h.264, devemos adicionar um nalu (unidade Network Abstraction Layer) aos dados de vídeo. O nalu inclui o cabeçalho nalu e o tipo nalu. O cabeçalho nalu é fixado em 0x00000001 (início do quadro) ou 0x000001 (no quadro). Os dados de h.264 são compostos de fatias e o conteúdo das fatias inclui: vídeo, sps, pps, etc. O tipo nalu determina o conteúdo dos dados h.264 subsequentes.
F 1b forbidden_zero_bit, h.264 estipula que deve ser 0
NRI 2b nal_ref_idc, valor 0 ~ 3, indica a importância deste nalu, quadro I, sps, pps geralmente leva 3, o quadro P geralmente leva 2 e o quadro B geralmente leva 0
Tipo 5b consulte a tabela abaixo
descrição de nal_unit_type
0 não usado
1 imagem não IDR, IDR refere-se ao quadro-chave
Partição A de 2 fatias
Partição B de 3 fatias
|
Digite o e-mail para obter uma surpresa
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albanês
ar.fmuser.org -> árabe
hy.fmuser.org -> armênio
az.fmuser.org -> Azerbaijão
eu.fmuser.org -> Basco
be.fmuser.org -> bielorrusso
bg.fmuser.org -> búlgaro
ca.fmuser.org -> catalão
zh-CN.fmuser.org -> Chinês (simplificado)
zh-TW.fmuser.org -> chinês (tradicional)
hr.fmuser.org -> croata
cs.fmuser.org -> checo
da.fmuser.org -> dinamarquês
nl.fmuser.org -> holandês
et.fmuser.org -> estoniano
tl.fmuser.org -> filipino
fi.fmuser.org -> finlandês
fr.fmuser.org -> francês
gl.fmuser.org -> galego
ka.fmuser.org -> georgiano
de.fmuser.org -> alemão
el.fmuser.org -> grego
ht.fmuser.org -> crioulo haitiano
iw.fmuser.org -> hebraico
hi.fmuser.org -> Hindi
hu.fmuser.org -> húngaro
is.fmuser.org -> islandês
id.fmuser.org -> indonésio
ga.fmuser.org -> irlandês
it.fmuser.org -> italiano
ja.fmuser.org -> Japonês
ko.fmuser.org -> coreano
lv.fmuser.org -> letão
lt.fmuser.org -> Lituano
mk.fmuser.org -> macedônio
ms.fmuser.org -> malaio
mt.fmuser.org -> maltês
no.fmuser.org - norueguês
fa.fmuser.org -> persa
pl.fmuser.org -> polonês
pt.fmuser.org -> português
ro.fmuser.org -> romeno
ru.fmuser.org -> russo
sr.fmuser.org -> Sérvio
sk.fmuser.org -> Eslovaco
sl.fmuser.org -> esloveno
es.fmuser.org -> espanhol
sw.fmuser.org -> Swahili
sv.fmuser.org -> sueco
th.fmuser.org -> Tailandês
tr.fmuser.org -> turco
uk.fmuser.org -> ucraniano
ur.fmuser.org -> Urdu
vi.fmuser.org -> vietnamita
cy.fmuser.org -> Galês
yi.fmuser.org -> iídiche
FMUSER Transmitir vídeo e áudio sem fio mais fácil!
Contato
Endereço:
No.305 Sala HuiLan Edifício No.273 Huanpu Road Guangzhou China 510620
Categorias
Newsletter