FMUSER Transferoni pa video dhe audio video dhe audio më lehtë!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikanisht
sq.fmuser.org -> shqip
ar.fmuser.org -> arabisht
hy.fmuser.org -> Armenisht
az.fmuser.org -> Azerbajxhanisht
eu.fmuser.org -> Baskisht
be.fmuser.org -> Bjellorusisht
bg.fmuser.org -> Bullgarisht
ca.fmuser.org -> katalanisht
zh-CN.fmuser.org -> Kinezisht (e thjeshtuar)
zh-TW.fmuser.org -> Kinezisht (Tradicionale)
hr.fmuser.org -> Kroate
cs.fmuser.org -> Çekisht
da.fmuser.org -> daneze
nl.fmuser.org -> Hollandisht
et.fmuser.org -> Estonisht
tl.fmuser.org -> Filipinase
fi.fmuser.org -> finlandisht
fr.fmuser.org -> Frëngjisht
gl.fmuser.org -> Galike
ka.fmuser.org -> gjeorgjian
de.fmuser.org -> gjermanisht
el.fmuser.org -> Greqisht
ht.fmuser.org -> Kreolishtja Haitiane
iw.fmuser.org -> Hebraisht
hi.fmuser.org -> Hindisht
hu.fmuser.org -> Hungarisht
is.fmuser.org -> Islandez
id.fmuser.org -> indonezisht
ga.fmuser.org -> Irlandez
it.fmuser.org -> Italisht
ja.fmuser.org -> Japoneze
ko.fmuser.org -> Koreane
lv.fmuser.org -> Letonisht
lt.fmuser.org -> Lituanisht
mk.fmuser.org -> maqedonas
ms.fmuser.org -> Malajzisht
mt.fmuser.org -> Maltese
no.fmuser.org -> Norvegjisht
fa.fmuser.org -> persisht
pl.fmuser.org -> polake
pt.fmuser.org -> Portugeze
ro.fmuser.org -> Rumanisht
ru.fmuser.org -> Rusisht
sr.fmuser.org -> serbisht
sk.fmuser.org -> Sllovake
sl.fmuser.org -> Sllovenisht
es.fmuser.org -> Spanjisht
sw.fmuser.org -> Suahilisht
sv.fmuser.org -> suedisht
th.fmuser.org -> Thai
tr.fmuser.org -> turqisht
uk.fmuser.org -> ukrainas
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamese
cy.fmuser.org -> Uellsit
yi.fmuser.org -> Yiddish
H264
Struktura e Nalu është Nalu, dhe struktura e Nalu është koka nal + rbsp. Rrjedha e të dhënave në transmetimin aktual tregohet në figurë:
Këtu është përshkrimi i figurës
Titulli nal llogaritet për një bajt, dhe 5 bitët e poshtëm paraqesin llojin nal, siç tregohet në tabelën vijuese:
Lloji NAL | Lloji nal |
0 | nuk përdoret |
një | Filma jo IDR |
dy | Fetë të dhëna një ndarje |
tre | Ndani ndarjen e të dhënave B |
katër | Ndani ndarjen C të të dhënave |
pesë | Filmi i imazhit IDR |
gjashtë | Njësia shtesë e informacionit për përmirësimin (SEI) |
shtatë | Seti i parametrave të sekuencës (SPS) |
tetë | Seti i parametrave të imazhit (PPS) |
nëntë | Shenja e demarkacionit |
dhjetë | Fundi i sekuencës |
njëmbëdhjetë | Fundi i rrjedhës |
dymbëdhjetë | mbush |
13..23 | mbaj |
24..31 | Asnjë rezervë |
RBSP është ngarkesa origjinale e sekuencës së bajteve.
Nëse tipi nal është 5, korniza është korniza I, dmth. Korniza kryesore dhe korniza jo kryesore (korniza P ...) kur tipi është 1.
Në kornizën aktuale të të dhënave H264, lloji nal i kornizës zakonisht paraprihet nga një ndarës 00, 001 ose 00001. Në përgjithësi, të dhënat e para të kornizës të përpiluara nga koduesi janë PPS dhe SPS, të ndjekura nga korniza I, dhe pastaj korniza P
Shtypja e transmetimit të videos me lehtësi / lehtësim
Easypusher dhe easytmp përdoren për të marrë rrjedhën e videos H264 dhe transmetimin e videos audio në lokal si burim video duke thirrur kamera SDK, duke tërhequr RTSP lumë, duke lexuar skedarin MP4, etj., Dhe më pas duke i shtyrë ato në serverin mediatik streaming nga RTSP dhe RTMP. Ato janë të gjitha programe shtytëse të transmetimit të videos që mbështesin windows, Linux, Android, IOS, krahun dhe platforma të tjera.
Më poshtë përshkruan se si ata i dallojnë kornizën I dhe kornizën P pasi të marrin transmetimin e videos në lokal, dhe më pas t'i shtyjnë ato:
// Ky kod lexon të dhënat H264 nga skedari dhe i shtyn ato në server
char i pa nënshkruar * ptr = char i ri i pa nënshkruar [madhësia e mostrës];
fread (ptr, madhësia_ e mostrës, 1, g_ fin);
// Shkruani një kornizë të dhënash - mund të shtyhet drejtpërdrejt në rrjet
// fwrite (ptr, madhësia_ e mostrës, 1, fout);
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
/*
* 4 bajtët e parë të PTR janë karakteri i ndarjes së kornizës 0000001, dhe bajti i pestë është i tipit nal
*/
karrierë e pa nënshkruar = ((karburant i pa nënshkruar) ptr [4] & 0x1F);
avFrame.pBuffer = (char i pa nënshkruar *) ptr;
avFrame.u32AVFrameLen = madhësia_kampion;
avFrame.u32VFrameType = (naltype == 0x05)? EASY_ SDK_ VIDEO_ FRAME_ I: EASY_ SDK_ VIDEO_ FRAME_ P;
avFrame.u32AVFrameFlag = EASY_ SDK_ VIDEO_ FRAME_ FLAMURI;
avFrame.u32TimestampSec = lTimeStamp / 1000000;
avFrame.u32TimestampUsec = (lTimeStamp% 1000000);
Nëse burimi i videos nuk është një skedar, por një IPcamera ose RTSP lumë, ata mund të kenë informuar tashmë kornizën aktuale nëse korniza aktuale është një kornizë I ose një kornizë P në modulimin e tyre të rikthimit të videos, kështu që hapat për të gjykuar nal lloji janë lënë jashtë.
HI_ S32 NETSDK_ APICALL OnStreamCallback (HI_ U32 u32 dorezë, / * dorezë * /
HI_ U32 dhe lloji i të dhënave, / * lloji i të dhënave, video ose të dhëna audio ose të dhëna të përbëra video audio * /
HI_ U8 * pu8buffer, / * të dhënat përmbajnë kokë kornize * /
Gjatësia HI_ U32 u32, / * gjatësia e të dhënave * /
HI_ Void * puserdata / * të dhënat e përdoruesit * /
)
{
HI_ S_ AVFrame * pstruAV = HI_ NULL;
HI_ S_ SysHeader * pstruSys = HI_ NULL;
nëse (u32DataType == HI_ NET_ DEV_ AV_ DATA)
{
pstruAV = (HI_ S_ AVFrame *) pu8Buffer;
nëse (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ VIDEO_ FRAME_ FLAMURI)
{
nëse (fPusherHandle == 0) kthimi 0;
nëse (pstruAV-> u32AVFrameLen> 0)
{
char i pa nënshkruar * pbuf = (char i pa nënshkruar *) (pu8Buffer + madhësia e (HI_ S_ AVFrame));
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
avFrame.u32AVFrameLen = pstruAV-> u32AVFrameLen;
avFrame.pBuffer = (char i pa nënshkruar *) pbuf;
avFrame.u32VFrameType = (pstruAV-> u32VFrameType == HI_ NET_ DEV_ VIDEO_ FRAME_ I)? EASY_ SDK_ VIDEO_ FRAME_ I: EASY_ SDK_ VIDEO_ FRAME_ P;
avFrame.u32AVFrameFlag = EASY_ SDK_ VIDEO_ FRAME_ FLAMURI;
avFrame.u32TimestampSec = pstruAV-> u32AVFramePTS / 1000;
avFrame.u32TimestampUsec = (pstruAV-> u32AVFramePTS% 1000) * 1000;
EasyPusher_ PushFrame (fPusherHandle, & avFrame);
}
}
tjetër
nëse (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ AUDIO_ FRAME_ FLAMURI)
{
nëse (fPusherHandle == 0) kthimi 0;
nëse (pstruAV-> u32AVFrameLen> 0)
{
// IPkamera e ndryshme, koka e të dhënave është e ndryshme këtu, dhe madhësia përkatëse duhet të anashkalohet në përputhje me SDK-në e tyre. Disa mund të mos kenë të dhëna të personalizuara
char i pa nënshkruar * pbuf = (char i pa nënshkruar *) (pu8Buffer + madhësia e (HI_ S_ AVFrame));
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
avFrame.u32AVFrameLen = pstruAV-> u32AVFrameLen-4; // Hiq kokën 4-bajt të përcaktuar nga prodhuesi
avFrame.pBuffer = (char i pa nënshkruar *) pbuf + 4;
avFrame.u32AVFrameFlag = EASY_ SDK_ AUDIO_ FRAME_ FLAMURI;
avFrame.u32TimestampSec = pstruAV-> u32AVFramePTS / 1000;
avFrame.u32TimestampUsec = (pstruAV-> u32AVFramePTS% 1000) * 1000;
EasyPusher_ PushFrame (fPusherHandle, & avFrame);
}
}
}
tjetër
nëse (u32DataType == HI_ NET_ DEV_ SYS_ TAT DHNAT)
{
pstruSys = (HI_ S_ SysHeader *) pu8Buffer;
printf ("Video W:% u H:% u Audio:% u \ n", pstruSys-> struVHeader.u32Width, pstruSys-> struVHeader.u32Hight, pstruSys-> struAHeader.u32Format);
}
kthimi i SUKSESIT HI_;
}
Me burimin e të dhënave, ju mund të shtyni RTSP dhe RTMP drejtpërdrejt duke telefonuar libeasypusher ose libeasyrtmp!
|
Fut email për të marrë një surprizë
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikanisht
sq.fmuser.org -> shqip
ar.fmuser.org -> arabisht
hy.fmuser.org -> Armenisht
az.fmuser.org -> Azerbajxhanisht
eu.fmuser.org -> Baskisht
be.fmuser.org -> Bjellorusisht
bg.fmuser.org -> Bullgarisht
ca.fmuser.org -> katalanisht
zh-CN.fmuser.org -> Kinezisht (e thjeshtuar)
zh-TW.fmuser.org -> Kinezisht (Tradicionale)
hr.fmuser.org -> Kroate
cs.fmuser.org -> Çekisht
da.fmuser.org -> daneze
nl.fmuser.org -> Hollandisht
et.fmuser.org -> Estonisht
tl.fmuser.org -> Filipinase
fi.fmuser.org -> finlandisht
fr.fmuser.org -> Frëngjisht
gl.fmuser.org -> Galike
ka.fmuser.org -> gjeorgjian
de.fmuser.org -> gjermanisht
el.fmuser.org -> Greqisht
ht.fmuser.org -> Kreolishtja Haitiane
iw.fmuser.org -> Hebraisht
hi.fmuser.org -> Hindisht
hu.fmuser.org -> Hungarisht
is.fmuser.org -> Islandez
id.fmuser.org -> indonezisht
ga.fmuser.org -> Irlandez
it.fmuser.org -> Italisht
ja.fmuser.org -> Japoneze
ko.fmuser.org -> Koreane
lv.fmuser.org -> Letonisht
lt.fmuser.org -> Lituanisht
mk.fmuser.org -> maqedonas
ms.fmuser.org -> Malajzisht
mt.fmuser.org -> Maltese
no.fmuser.org -> Norvegjisht
fa.fmuser.org -> persisht
pl.fmuser.org -> polake
pt.fmuser.org -> Portugeze
ro.fmuser.org -> Rumanisht
ru.fmuser.org -> Rusisht
sr.fmuser.org -> serbisht
sk.fmuser.org -> Sllovake
sl.fmuser.org -> Sllovenisht
es.fmuser.org -> Spanjisht
sw.fmuser.org -> Suahilisht
sv.fmuser.org -> suedisht
th.fmuser.org -> Thai
tr.fmuser.org -> turqisht
uk.fmuser.org -> ukrainas
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamese
cy.fmuser.org -> Uellsit
yi.fmuser.org -> Yiddish
FMUSER Transferoni pa video dhe audio video dhe audio më lehtë!
Kontakt
Adresa:
Nr.305 Dhoma Ndërtesa HuiLan Nr.273 Huanpu Road Guangzhou Kinë 510620
Kategoritë
Gazete