FMUSER Wirless transmet la vidéo et l'audio plus facilement!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albanais
ar.fmuser.org -> arabe
hy.fmuser.org -> Armenian
az.fmuser.org -> azerbaïdjanais
eu.fmuser.org -> basque
be.fmuser.org -> biélorusse
bg.fmuser.org -> Bulgare
ca.fmuser.org -> catalan
zh-CN.fmuser.org -> chinois (simplifié)
zh-TW.fmuser.org -> Chinois (traditionnel)
hr.fmuser.org -> croate
cs.fmuser.org -> tchèque
da.fmuser.org -> danois
nl.fmuser.org -> Néerlandais
et.fmuser.org -> estonien
tl.fmuser.org -> Philippin
fi.fmuser.org -> finnois
fr.fmuser.org -> Français
gl.fmuser.org -> Galicien
ka.fmuser.org -> géorgien
de.fmuser.org -> allemand
el.fmuser.org -> Grec
ht.fmuser.org -> Créole haïtien
iw.fmuser.org -> hébreu
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hongrois
is.fmuser.org -> islandais
id.fmuser.org -> indonésien
ga.fmuser.org -> irlandais
it.fmuser.org -> Italien
ja.fmuser.org -> japonais
ko.fmuser.org -> coréen
lv.fmuser.org -> letton
lt.fmuser.org -> Lituanien
mk.fmuser.org -> macédonien
ms.fmuser.org -> malais
mt.fmuser.org -> maltais
no.fmuser.org -> Norwegian
fa.fmuser.org -> persan
pl.fmuser.org -> polonais
pt.fmuser.org -> portugais
ro.fmuser.org -> Roumain
ru.fmuser.org -> russe
sr.fmuser.org -> serbe
sk.fmuser.org -> slovaque
sl.fmuser.org -> Slovène
es.fmuser.org -> espagnol
sw.fmuser.org -> Swahili
sv.fmuser.org -> suédois
th.fmuser.org -> Thai
tr.fmuser.org -> turc
uk.fmuser.org -> ukrainien
ur.fmuser.org -> ourdou
vi.fmuser.org -> Vietnamienne
cy.fmuser.org -> Gallois
yi.fmuser.org -> Yiddish
HLS et Http Live Streaming sont des protocoles de streaming en temps réel définis par Apple. HLS est implémenté sur la base du protocole HTTP. Le contenu de la transmission comprend deux parties, l'une est le fichier de description M3U8 et l'autre est le fichier multimédia TS.
1. Fichier M3U8
Le fichier multimédia est décrit sous forme de texte, composé d'une série de balises.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: La première ligne de chaque fichier M3U8 doit être cette balise.
# EXT-X-TARGETDURATION: spécifiez la durée maximale du segment multimédia (secondes). La durée spécifiée dans #EXTINF doit être inférieure ou égale à cette valeur maximale. Cette valeur ne peut apparaître qu'une seule fois.
#EXTINF: Décrivez la longueur d'un seul fichier multimédia. Les fichiers multimédias suivent, tels que ./0.ts
2. fichier ts
Le fichier ts est un fichier de flux de transport, le format de codage vidéo principal est h264 / mpeg4 et l'audio est acc / MP3.
Le fichier ts est divisé en trois couches: ts layer Transport Stream, pes layer Packet Elemental Stream, es layer Elementary Stream. La couche es correspond aux données audio et vidéo, et la couche pes correspond aux informations de description de trame de données, telles qu'un horodatage ajouté aux données audio et vidéo. La couche ts consiste à ajouter les informations nécessaires pour l'identification et la transmission du flux de données dans la couche pes
Remarque: les détails sont les suivants
(1) couche ts La taille du paquet ts est fixée à 188 octets et la couche ts est divisée en trois parties: l'en-tête ts, le champ d'adaptation et la charge utile. L'en-tête ts est fixé à 4 octets; le champ d'adaptation peut exister ou non, et sa fonction principale est de remplir des données de moins de 188 octets; la charge utile est constituée de données pes.
en-tête ts
octet de synchronisation sync_byte 8b, fixé à 0x47
transport_error_indicator 1b Indicateur d'erreur de transport, indiquant qu'il y a un octet inutile après le champ adapt de l'en-tête ts, généralement 0, cet octet est compté dans la longueur du champ adapt
payload_unit_start_indicator 1b Indicateur de démarrage de l'unité de chargement, qui est marqué par 1 au début d'un paquet de données complet
transport_priority 1b Priorité de transport, 0 est une priorité faible, 1 est une priorité élevée, généralement 0
pid 13b valeur pid
transport_scrambling_control 2b Contrôle de brouillage de transport, 00 signifie non chiffré
adaptation_field_control 2b S'il faut inclure le champ d'adaptation, «00» est réservé; «01» signifie pas de champ d'adaptation, uniquement la charge utile; «10» signifie uniquement le champ d'adaptation, pas de charge utile; «11» signifie que l'adaptation est également incluse dans le domaine et la charge utile.
Continuité_Compteur 4b Compteur croissant, de 0 à f, la valeur de départ ne prend pas nécessairement 0, mais elle doit être continue
Le contenu de la couche ts est identifié par la valeur PID et le contenu principal comprend: la table PAT, la table PMT, le flux audio et le flux vidéo. Pour analyser le flux ts, vous devez d'abord trouver la table PAT, tant que vous trouvez le PAT, vous pouvez trouver le PMT, puis vous pouvez trouver les flux audio et vidéo. La valeur PID de la table PAT est fixée à 0. La table PAT et la table PMT doivent être insérées régulièrement dans le flux ts, car l'utilisateur peut rejoindre le flux ts à tout moment, cet intervalle est relativement petit, généralement tous les quelques images vidéo pour ajouter PAT et PMT. Les tables PAT et PMT sont nécessaires, et d'autres tables telles que SDT (table de description de service) peuvent également être ajoutées, mais le flux hls peut être lu tant qu'il y a PAT et PMT.
Table PAT: Sa fonction principale est d'indiquer la valeur PID de la table PMT.
Table PMT: Sa fonction principale est de spécifier la valeur PID du flux audio et vidéo.
Flux audio / flux vidéo: transportez du contenu audio et vidéo.
adaptation
adaptation_field_length 1B longueur du champ d'adaptation, le nombre d'octets derrière
l'indicateur 1B prend 0x50 pour indiquer PCR ou 0x40 pour ne pas inclure PCR
PCR 5B Program Clock Reference, référence d'horloge de programme, utilisée pour récupérer l'horloge de synchronisation du système STC (System Time Clock) cohérente avec le codeur.
stuffing_bytes xB octets de bourrage, la valeur est 0xff
La longueur de la zone d'adaptation doit comprendre un octet identifié par l'indicateur d'erreur de transmission. pcr est la référence d'horloge du programme, pcr, dts, pts sont toutes des valeurs échantillonnées de la même horloge système, pcr est incrémental, il peut donc être défini comme valeur dts, les données audio n'ont pas besoin de pcr. S'il n'y a pas de champ, ipad peut jouer, mais vlc ne peut pas jouer. Lors du conditionnement du flux ts, les tables PAT et PMT n'ont pas de champ d'adaptation. Si la longueur n'est pas suffisante, remplissez simplement 0xff. Le flux vidéo et le flux audio doivent ajouter un champ d'adaptation, qui est généralement ajouté au premier paquet ts et au dernier paquet ts d'une trame, et le paquet ts du milieu n'est pas ajouté.
Format PAT
table_id 8b La table PAT est fixée à 0x00
section_syntax_indicator 1b est fixé à 1
zéro 1b est fixé à 0
réservé 2b est fixé à 11
section_length 12b La longueur des données suivantes
transport_stream_id 16b ID de flux de transport, fixé comme 0x0001
réservé 2b est fixé à 11
version_number 5b Numéro de version, fixé à 00000, si PAT change, le numéro de version augmentera de 1
current_next_indicator 1b est fixé à 1, indiquant que cette table PAT peut être utilisée, si elle est 0, attendez la table PAT suivante
section_number 8b est fixé à 0x00
last_section_number 8b est fixé à 0x00
début de la boucle
numéro_programme 16b Lorsque le numéro de programme est 0x0000, cela signifie qu'il s'agit de NIT, lorsque le numéro de programme est 0x0001, cela signifie qu'il s'agit de PMT
réservé 3b est fixé à 111
PID 13b Valeur PID correspondant au contenu du numéro de programme
Boucle de fin
CRC32 32b CRC32 code de contrôle des données précédentes
Format PMT
table_id 8b La table PMT a une valeur quelconque, 0x02
section_syntax_indicator 1b est fixé à 1
zéro 1b est fixé à 0
réservé 2b est fixé à 11
section_length 12b La longueur des données suivantes
numéro_programme 16b numéro de canal, ce qui signifie le canal associé au PMT actuel, la valeur est 0x0001
réservé 2b est fixé à 11
version_number 5b Numéro de version, fixé à 00000, si PAT change, le numéro de version augmentera de 1
current_next_indicator 1b est fixé à 1
section_number 8b est fixé à 0x00
last_section_number 8b est fixé à 0x00
réservé 3b est fixé à 111
PCR_PID 13b Le PID du paquet TS où se trouve PCR (horloge de référence du programme), désigné comme PID vidéo
réservé 4b est fixé à 1111
program_info_length 12b Informations de description de programme, désignées par 0x000 signifie non
début de la boucle
stream_type 8b Type de flux, la marque est vidéo ou audio ou d'autres données, le codage h.264 correspond à 0x1b, le codage aac correspond à 0x0f, le codage mp3 correspond à 0x03
réservé 3b est fixé à 111
elementary_PID 13b PID correspondant à stream_type
réservé 4b est fixé à 1111
ES_info_length 12b Les informations de description, désignées par 0x000 signifient non
Boucle de fin
CRC32 32b CRC32 code de contrôle des données précédentes
(2) couche de pes
La couche pes ajoute un horodatage et d'autres informations à chaque image vidéo / audio. Le paquet pes contient beaucoup de contenu, et nous ne laissons que les plus couramment utilisés.
code de démarrage pes code de démarrage 3B, fixé à 0x000001
ID de flux 1B valeur audio (0xc0-0xdf), généralement 0xc0
Valeur vidéo (0xe0-0xef), généralement 0xe0
pes packet length 2B La longueur des données pes derrière, 0 signifie une longueur illimitée,
Seule la longueur des données vidéo dépassera 0xffff
L'indicateur 1B prend généralement la valeur 0x80, ce qui signifie que les données ne sont pas chiffrées, n'ont pas de priorité et sont des données sauvegardées
La valeur du drapeau 1B 0x80 signifie uniquement pts, la valeur 0xc0 signifie pts et dts
pes data length 1B La longueur des données suivantes, la valeur est 5 ou 10
pts 5B valeur 33 bits
valeur dts 5B 33 bits
pts est l'horodatage d'affichage et dts est l'horodatage de décodage. Les deux horodatages sont nécessaires pour les données vidéo. Les pts et dts des données audio sont les mêmes, donc seuls les pts sont nécessaires. Il existe deux horodatages, pts et dts, qui sont causés par des trames B. Les pts des trames I et P sont égaux à dts. Si une vidéo n'a pas d'images B, les pts seront toujours les mêmes que dts. Lisez les images vidéo de manière séquentielle à partir du fichier et la séquence des images extraites est la même que la séquence dts. L'algorithme dts est relativement simple, la valeur initiale + incrément suffit, le calcul des pts est plus compliqué et le décalage doit être ajouté aux dts.
Il n'y a que des pts dans le pes audio (comme dts), les images I et P de la vidéo doivent avoir les deux horodatages, et l'image B vidéo n'a besoin que de pts (comme dts). Pour emballer pts et dts, vous devez connaître le type d'image vidéo, mais nous ne pouvons pas juger du type d'image par le format du conteneur. Vous devez analyser le contenu h.264 pour obtenir le type de trame.
par exemple:
IPBBBP
Ordre de lecture: 1 2 3 4 5 6
ordre dts: 1 2 3 4 5 6
ordre des points: 1 5 3 2 4 6
Algorithme DTS vidéo à la demande:
dts = valeur initiale + 90000 / video_frame_rate, la valeur initiale peut être spécifiée arbitrairement, mais il est préférable de ne pas prendre 0, video_frame_rate est la fréquence d'images, telle que 23, 30.
pts et dts sont basés sur une échelle de temps, 1s = 90000 échelle de temps, une image doit être une échelle de temps 90000 / video_frame_rate.
La division de l'échelle de temps d'une image par la fréquence d'échantillonnage peut être convertie en la durée de lecture d'une image
Algorithme DTS audio à la demande:
dts = valeur initiale + (90000 * audio_samples_per_frame) / audio_sample_rate, la valeur de audio_samples_per_frame est liée au codec, la valeur aac est 1024, la valeur mp3 est 1158, audio_sample_rate est le taux d'échantillonnage, tel que 24000, 41000. Un AC décode une image de 1024 échantillons par canal, ce qui signifie que la durée d'une image est de 1024 / sample_rate secondes. Ainsi, l'horodatage de chaque image est 0, 1024 / sample_rate, ..., 1024 * n / sample_rate secondes.
Les dts et pts de la vidéo en direct doivent utiliser directement l'heure du flux de données en direct et ne doivent pas être calculés par des formules.
(3) couche es
La couche es fait référence aux données audio et vidéo, nous n'introduisons que la vidéo h.264 et l'audio aac.
Vidéo h.264:
Pour emballer les données h.264, nous devons ajouter un nalu (unité de couche d'abstraction réseau) aux données vidéo. Le nalu comprend l'en-tête nalu et le type nalu. L'en-tête nalu est fixé à 0x00000001 (début de trame) ou 0x000001 (dans la trame). Les données de h.264 sont composées de tranches et le contenu des tranches comprend: vidéo, sps, pps, etc. Le type nalu détermine le contenu des données h.264 suivantes.
F 1b interdit_zéro_bit, h.264 stipule qu'il doit être 0
NRI 2b nal_ref_idc, valeur 0 ~ 3, indique l'importance de ce nalu, I frame, sps, pps prennent généralement 3, P frame prend généralement 2, et B frame prend généralement 0
Type 5b se référer au tableau ci-dessous
Description du type d'unité_nal
0 non utilisé
1 Image non-IDR, IDR fait référence à l'image clé
Partition A à 2 tranches
Partition B à 3 tranches
|
Entrez l'email pour avoir une surprise
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albanais
ar.fmuser.org -> arabe
hy.fmuser.org -> Armenian
az.fmuser.org -> azerbaïdjanais
eu.fmuser.org -> basque
be.fmuser.org -> biélorusse
bg.fmuser.org -> Bulgare
ca.fmuser.org -> catalan
zh-CN.fmuser.org -> chinois (simplifié)
zh-TW.fmuser.org -> Chinois (traditionnel)
hr.fmuser.org -> croate
cs.fmuser.org -> tchèque
da.fmuser.org -> danois
nl.fmuser.org -> Néerlandais
et.fmuser.org -> estonien
tl.fmuser.org -> Philippin
fi.fmuser.org -> finnois
fr.fmuser.org -> Français
gl.fmuser.org -> Galicien
ka.fmuser.org -> géorgien
de.fmuser.org -> allemand
el.fmuser.org -> Grec
ht.fmuser.org -> Créole haïtien
iw.fmuser.org -> hébreu
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hongrois
is.fmuser.org -> islandais
id.fmuser.org -> indonésien
ga.fmuser.org -> irlandais
it.fmuser.org -> Italien
ja.fmuser.org -> japonais
ko.fmuser.org -> coréen
lv.fmuser.org -> letton
lt.fmuser.org -> Lituanien
mk.fmuser.org -> macédonien
ms.fmuser.org -> malais
mt.fmuser.org -> maltais
no.fmuser.org -> Norwegian
fa.fmuser.org -> persan
pl.fmuser.org -> polonais
pt.fmuser.org -> portugais
ro.fmuser.org -> Roumain
ru.fmuser.org -> russe
sr.fmuser.org -> serbe
sk.fmuser.org -> slovaque
sl.fmuser.org -> Slovène
es.fmuser.org -> espagnol
sw.fmuser.org -> Swahili
sv.fmuser.org -> suédois
th.fmuser.org -> Thai
tr.fmuser.org -> turc
uk.fmuser.org -> ukrainien
ur.fmuser.org -> ourdou
vi.fmuser.org -> Vietnamienne
cy.fmuser.org -> Gallois
yi.fmuser.org -> Yiddish
FMUSER Wirless transmet la vidéo et l'audio plus facilement!
Communiquez avec nous
Adresse :
No.305 Chambre HuiLan Building No.273 Huanpu Road Guangzhou Chine 510620
Catégories
Infolettre