„FMUSER Wirless“ perduoda vaizdo ir garso įrašus lengviau!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikanų kalba
sq.fmuser.org -> albanų
ar.fmuser.org -> arabų
hy.fmuser.org -> armėnas
az.fmuser.org -> azerbaidžanietis
eu.fmuser.org -> baskų
be.fmuser.org -> baltarusių
bg.fmuser.org -> bulgarų
ca.fmuser.org -> katalonų
zh-CN.fmuser.org -> kinų (supaprastinta)
zh-TW.fmuser.org -> kinų (tradicinė)
hr.fmuser.org -> kroatų
cs.fmuser.org -> čekų
da.fmuser.org -> danų
nl.fmuser.org -> Olandų
et.fmuser.org -> estų
tl.fmuser.org -> filipinietis
fi.fmuser.org -> suomių
fr.fmuser.org -> prancūzų
gl.fmuser.org -> Galisų
ka.fmuser.org -> gruzinų
de.fmuser.org -> vokiečių kalba
el.fmuser.org -> graikų
ht.fmuser.org -> Haičio kreolis
iw.fmuser.org -> hebrajų
hi.fmuser.org -> hindi
hu.fmuser.org -> vengrų
is.fmuser.org -> islandų
id.fmuser.org -> indoneziečių
ga.fmuser.org -> airių
it.fmuser.org -> italų kalba
ja.fmuser.org -> japonų
ko.fmuser.org -> korėjiečių
lv.fmuser.org -> latvių
lt.fmuser.org -> lietuvis
mk.fmuser.org -> makedonų
ms.fmuser.org -> malajiečių
mt.fmuser.org -> maltiečių
no.fmuser.org -> norvegų
fa.fmuser.org -> persų
pl.fmuser.org -> lenkų
pt.fmuser.org -> portugalų
ro.fmuser.org -> rumunų
ru.fmuser.org -> rusų
sr.fmuser.org -> serbų
sk.fmuser.org -> slovakų
sl.fmuser.org -> slovėnų
es.fmuser.org -> ispanų
sw.fmuser.org -> svahili kalba
sv.fmuser.org -> švedų
th.fmuser.org -> Tailando
tr.fmuser.org -> turkų
uk.fmuser.org -> ukrainietis
ur.fmuser.org -> urdu
vi.fmuser.org -> vietnamiečių
cy.fmuser.org -> Valų kalba
yi.fmuser.org -> jidiš
1. Kaip naudoti RTMP srautinį modulį demonstracinėje versijoje
(1) Kelių platformų atveju naujausia versija pakeičia rtmp srautinį modulį į c ++, o RTMP srautinį adresą galima pakeisti „doublesky_rtmp :: p_start_rtmp ()“ doublesky_rtmp.cpp metodu.
(2) Kad būtų tingus, autorius neanalizavo sps ir pps iš norimo stumti failo h264, o parašė sps ir pps metodo p_start_rtmp parametre sps_pps. Jei norite nusiųsti savo „h264“ failą, nepamirškite jo modifikuoti čia, kitaip bus rodomas jūsų perkeltas srautas, aš čia beveik pamiršau, ir man įdomu, kaip pakeisti failą, kad paleistumėte srautą.
2. Idėjų realizavimas
Vis dar remiasi ffmpeg, kad būtų galima susieti, bendras procesas yra
1. AVFormatContext及其中的AVIOContext、AVOutputFormat初始化,调用函数为avio_open与av_guess_format
2. 开启rtmp推流avformat_write_header
3. 写入音视频帧数据av_interleaved_write_frame
3. Protokolo mokymasis ir paketų fiksavimo analizė
Pagrindinis RTMP protokolo vienetas yra „Message Body“, o duomenų perdavimo metu pranešimas padalijamas į RTMP Chunk Header + RTMP Chunk Data.
Jei pranešimas yra 300 baitų, numatytasis „RTMP Chunk Data“ dydis paprastai yra 128 baitai, todėl šis 300 baitų pranešimas padalijamas į
Pirmasis paketas: „RTMP Chunk Header“ + 128 baitų naudingoji apkrova
Antrasis paketas: „RTMP Chunk Header“ + 128 baitų naudingoji apkrova
Trečiasis paketas: „RTMP Chunk Header“ + 44 baitų naudingoji apkrova
RTMP gabalinę antraštę sudaro pagrindinė antraštė + pranešimo antraštė + išplėstinė laiko žyma
Pagrindinė antraštė: 1-3 baitai Čia paketų surinkimo procese mačiau tik 1 baitą, todėl analizuoju tik 1 baito formatą.
0 1 2 3 4 5 6 7 Iš viso 8 skaitmenys: 0–1 skaitmuo rodo formatą, kuris yra pranešimo antraštės ilgis, o 2–7 skaitmenys nurodo „Chunk Stream“ ID
Kai formatas yra 00, pranešimo antraštės ilgis yra 11 baitų: „TimeStamp“ (3 baitai) + „MessageLength“ (3 baitai) + „MessageTypeID“ (1 baitas) + „MessageStreamID“ (4 baitai)
Kai formatas yra 01, pranešimo antraštės ilgis yra 7 baitai: „TimeStamp“ (3 baitai) + „MessageLength“ (3 baitai) + „MessageTypeID“ (1 baitas)
Kai formatas yra 10, pranešimo antraštės ilgis yra 3 baitai: „TimeStamp“ (3 baitai)
Kai formatas yra 11, pranešimo antraštės ilgis yra 0 baitų: nėra
Čia rasite „Wireshark“ paketų užfiksavimo ekrano kopiją, kad galėtume išanalizuoti atitinkamą protokolą:
Kaip matote 1 paveiksle, pirmasis baitas yra 03, viršutiniai du bitai rodo pagrindinės antraštės formatą kaip 00, o tai reiškia, kad pranešimo antraštės ilgis yra visas 11 baitų, pagrindinės antraštės „Chunk Stream“ ID yra 3 , o kėbulo dydis taip pat yra „MessageLength“, o tai reiškia, kad šio RTMP turinio naudingosios apkrovos duomenys yra 141 baitai, o „MessageTypeID“ - 0x14. Pakalbėkime apie lauką Pranešimo tipas. Kai yra 1–7, tai yra protokolo valdymo pranešimas. 8 ir 9 rodo, kad RTMP korpusas yra garso ir vaizdo duomenys. -20 yra duomenys AMF kodavimo formatu. AMF kodavimas yra „Adobe“ sukurtas kodavimo formatas. Nuoroda į susijusią informaciją bus pateikta vėliau, ir susidomėję studentai gali ją pažvelgti.
4. Suskirstykite garso ir vaizdo rėmelius į kelis RTMP paketus
Kaip minėta anksčiau, numatytasis RTMP „Chunk Data“ dydis protokole yra 128 baitai, tačiau visi žino, kad net suglaudintas vaizdo kadras yra labai didelis. Įsivaizduokite, jei 100,000 128 baitų vaizdo kadras yra 780 baitų. Jei padalinsite jį pagal vienetą, turite jį padalyti į daugiau nei 780 paketų ir daugiau nei 2 RTMP gabalų antraščių. Tai ne tik sukelia duomenų perteklių, bet ir siuntėjo bei imtuvo išpakavimas ir sugrupavimas sunaudoja našumą. Todėl galime pamatyti, kad srauto stūmimo procese yra protokolo paketas „Set Chunk Size“, kad būtų galima nustatyti „Chunk Data“ dydį, kaip parodyta 01 paveiksle. Čia galite pamatyti, kad bus tipo ID 4096 prieš paspaudimą, kuris nustato RTMP gabalėlio dydžio dydį. Paketas, čia matome, kad nustatyta vertė yra XNUMX.
Kitas žingsnis - pažvelgti į vaizdo paketo padalijimą. Didelis vaizdo rėmelis yra padalintas į kelis gabalus, tačiau „wireshark“ nėra konvertuojamas į RTMP paketus, tačiau visi jie pripažįstami kaip TCP paketai. Čia aš privertiau save abejoti RTMP supratimu. Yra klaida, paketų surinkimo rezultatas parodytas 3 paveiksle
Čia galite pamatyti, kad 3 paveiksle viršutinis skaičius yra 3292 (pirmoji eilutė). Pasirinktos duomenų eilutės bendras ilgis yra 78 baitai, o TCP naudingoji apkrova yra 12 baitų, o tai iš tikrųjų yra išsami RTMP rinkinio antraštė. Pagal pirmiau pateiktą protokolo analizę galime pamatyti, kad RTMP korpuso dydis yra 00 6b c6 yra 27590 baitai, o tai reiškia, kad bendras šio vaizdo kadro ilgis yra 27590 baitai, o tada skaičius yra 3293 (bendras ilgis yra 1514 duomenų baitai) , jos naudingosios apkrovos dalis 1448 baitai = 1514-14 (nuorodos sluoksnio rėmelio antraštė) -20 (ip antraštė) -20 (tcp antraštė) -12 (tcp parinktis), duomenų analizė, pažymėta 3294, yra tokia pati kaip 3293, raktas į duomenis, sunumeruotus 3295, kodėl jo duomenų apkrova yra tik 1266 baitai (apkrovos duomenys yra 1200 baitų, 1266 atėmus kiekvieno protokolo antraštės duomenis yra 1200), todėl prieš stumiant protokolo dalį „Chunk Size“ buvo nustatytas į 4096 srautas, taigi RTMP paketo apkrova gali perkelti tik iki 4096 baitų duomenų. Kiekvienos dalies apkrovos duomenys čia yra 1448 + 1448 + 1200, o tai lygiai 4096. Tai reiškia, kad siunčiamas RTMP paketas RTMP paketo antraštėje 4 paveiksle parodyti kiti paketiniai duomenys.
4 paveiksle paimame pirmąjį baitą c6 kaip pagrindinę antraštę. Matome, kad fmt yra 11, o tai reiškia, kad nėra pranešimo antraštės. Manoma, kad šis vaizdo įrašo kadras yra per ilgas ir jį reikia padalyti į kelis 4096 paketus, todėl galima naudoti šiuos paketus. Norėdami sumažinti perteklių, eikite į pirmojo paketo pranešimų antraštę.
Tada daugiau to neanalizuosiu. Turiu pasakyti, kad „Wireshark“ nepadėjo konvertuoti TCP paketų į RTMP paketus, kurie čia sugaišo daug laiko, tačiau jei gerai apie tai pagalvotumėte, tai galima laikyti gilinančiu supratimą apie RTMP protokolą.
|
Įveskite el. Pašto adresą, kad gautumėte staigmeną
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikanų kalba
sq.fmuser.org -> albanų
ar.fmuser.org -> arabų
hy.fmuser.org -> armėnas
az.fmuser.org -> azerbaidžanietis
eu.fmuser.org -> baskų
be.fmuser.org -> baltarusių
bg.fmuser.org -> bulgarų
ca.fmuser.org -> katalonų
zh-CN.fmuser.org -> kinų (supaprastinta)
zh-TW.fmuser.org -> kinų (tradicinė)
hr.fmuser.org -> kroatų
cs.fmuser.org -> čekų
da.fmuser.org -> danų
nl.fmuser.org -> Olandų
et.fmuser.org -> estų
tl.fmuser.org -> filipinietis
fi.fmuser.org -> suomių
fr.fmuser.org -> prancūzų
gl.fmuser.org -> Galisų
ka.fmuser.org -> gruzinų
de.fmuser.org -> vokiečių kalba
el.fmuser.org -> graikų
ht.fmuser.org -> Haičio kreolis
iw.fmuser.org -> hebrajų
hi.fmuser.org -> hindi
hu.fmuser.org -> vengrų
is.fmuser.org -> islandų
id.fmuser.org -> indoneziečių
ga.fmuser.org -> airių
it.fmuser.org -> italų kalba
ja.fmuser.org -> japonų
ko.fmuser.org -> korėjiečių
lv.fmuser.org -> latvių
lt.fmuser.org -> lietuvis
mk.fmuser.org -> makedonų
ms.fmuser.org -> malajiečių
mt.fmuser.org -> maltiečių
no.fmuser.org -> norvegų
fa.fmuser.org -> persų
pl.fmuser.org -> lenkų
pt.fmuser.org -> portugalų
ro.fmuser.org -> rumunų
ru.fmuser.org -> rusų
sr.fmuser.org -> serbų
sk.fmuser.org -> slovakų
sl.fmuser.org -> slovėnų
es.fmuser.org -> ispanų
sw.fmuser.org -> svahili kalba
sv.fmuser.org -> švedų
th.fmuser.org -> Tailando
tr.fmuser.org -> turkų
uk.fmuser.org -> ukrainietis
ur.fmuser.org -> urdu
vi.fmuser.org -> vietnamiečių
cy.fmuser.org -> Valų kalba
yi.fmuser.org -> jidiš
„FMUSER Wirless“ perduoda vaizdo ir garso įrašus lengviau!
Susisiekite su mumis
Adresas:
Nr. 305 kambarys „HuiLan“ pastatas Nr. 273 Huanpu Road Guangdžou, Kinija 510620
Kategorijos
Naujienlaiškis