FMUSER Wirless Overfør video og lyd enklere!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albansk
ar.fmuser.org -> arabisk
hy.fmuser.org -> armensk
az.fmuser.org -> aserbajdsjansk
eu.fmuser.org -> baskisk
be.fmuser.org -> hviterussisk
bg.fmuser.org -> Bulgarian
ca.fmuser.org -> katalansk
zh-CN.fmuser.org -> Kinesisk (forenklet)
zh-TW.fmuser.org -> Kinesisk (tradisjonell)
hr.fmuser.org -> Kroatisk
cs.fmuser.org -> tsjekkisk
da.fmuser.org -> dansk
nl.fmuser.org -> Nederlandsk
et.fmuser.org -> estisk
tl.fmuser.org -> filippinsk
fi.fmuser.org -> finsk
fr.fmuser.org -> French
gl.fmuser.org -> galisisk
ka.fmuser.org -> Georgisk
de.fmuser.org -> tysk
el.fmuser.org -> gresk
ht.fmuser.org -> haitisk kreolsk
iw.fmuser.org -> hebraisk
hi.fmuser.org -> hindi
hu.fmuser.org -> Ungarsk
is.fmuser.org -> islandsk
id.fmuser.org -> indonesisk
ga.fmuser.org -> Irsk
it.fmuser.org -> Italiensk
ja.fmuser.org -> japansk
ko.fmuser.org -> koreansk
lv.fmuser.org -> lettisk
lt.fmuser.org -> litauisk
mk.fmuser.org -> makedonsk
ms.fmuser.org -> malaysisk
mt.fmuser.org -> maltesisk
no.fmuser.org -> norsk
fa.fmuser.org -> persisk
pl.fmuser.org -> polsk
pt.fmuser.org -> portugisisk
ro.fmuser.org -> rumensk
ru.fmuser.org -> russisk
sr.fmuser.org -> serbisk
sk.fmuser.org -> Slovakisk
sl.fmuser.org -> Slovenian
es.fmuser.org -> spansk
sw.fmuser.org -> Swahili
sv.fmuser.org -> svensk
th.fmuser.org -> Thai
tr.fmuser.org -> tyrkisk
uk.fmuser.org -> ukrainsk
ur.fmuser.org -> urdu
vi.fmuser.org -> Vietnamesisk
cy.fmuser.org -> walisisk
yi.fmuser.org -> Yiddish
H264
Strukturen til Nalu er Nalu, og strukturen til Nalu er nal head + rbsp. Dataflyten i den faktiske overføringen er vist i figuren:
Her er bildebeskrivelsen
Nal-overskriften utgjør en byte, og de nedre 5-bits bitene representerer nal-typen, som vist i følgende tabell:
NAL-type | Nal type |
0 | ikke brukt |
en | Ikke-IDR-filmer |
to | Skjær data en partisjon |
tre | Skjær data partisjon B |
fire | Del data C-partisjon |
fem | Filmen av IDR image |
seks | Supplerende enhetsinformasjonsenhet (SEI) |
syv | Sekvensparametersett (SPS) |
åtte | Bildeparametersett (PPS) |
ni | Avgrensningsmerke |
ti | Slutten på sekvensen |
elleve | Slutt på strømmen |
tolv | fyll |
13..23 | beholde |
24..31 | Ingen reservasjoner |
RBSP er den opprinnelige belastningen på bytesekvensen.
Hvis naltypen er 5, er rammen I-ramme, dvs. nøkkelramme og ikke-nøkkelramme (P-ramme ...) når typen er 1.
I den faktiske H264-datarammen foregår vanligvis den nale typen av rammen med en separator 00, 001 eller 00001. Generelt sett er den første rammedata som er samlet av koderen PPS og SPS, etterfulgt av ramme I og deretter P-ramme
Enkel skyver / easytmp video streaming push
Easypusher og easytmp brukes til å skaffe H264 videostrøm og lydvideostrøm til lokal som videokilde ved å ringe kameraet SDK, trekke RTSP-strøm, lese MP4-fil osv., Og deretter skyve dem til streaming medieserver av RTSP og RTMP. De er alle videostreaming-push-programmer som støtter windows, Linux, Android, IOS, arm og andre plattformer.
Følgende beskriver hvordan de skiller mellom I-ramme og P-ramme etter at de får videostrømmen til lokal, og deretter skyver dem:
// Denne koden leser H264-data fra filen og skyver dem til serveren
usignert char * ptr = ny usignert char [sample_ størrelse];
fread (ptr, sample_ size, 1, g_ fin);
// Skriv en dataramme - kan skyves direkte på nettverket
// fwrite (ptr, sample_ size, 1, fout);
EASY_ AV_ Ramme avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
/*
* De første 4 bytene av PTR er rammedelingstegn 0000001, og den femte byten er en type
*/
usignert char naltype = ((usignert char) ptr [4] & 0x1F);
avFrame.pBuffer = (usignert tegn *) ptr;
avFrame.u32AVFrameLen = sample_ størrelse;
avFrame.u32VFrameType = (naltype == 0x05)? EASY_ SDK_ VIDEO_ FRAME_ I: EASY_ SDK_ VIDEO_ FRAME_ P;
avFrame.u32AVFrameFlag = EASY_ SDK_ VIDEO_ FRAME_ FLAG;
avFrame.u32TimestampSec = lTimeStamp / 1000000;
avFrame.u32TimestampUsec = (lTimeStamp% 1000000);
Hvis videokilden ikke er en fil, men en IPcamera- eller RTSP-strøm, kan de allerede ha informert den nåværende rammen om den nåværende rammen er en I-ramme eller en P-ramme i deres videostreaming-modulasjon, så trinnene for å bedømme nal typen er utelatt.
HI_ S32 NETSDK_ APICALL OnStreamCallback (HI_ U32 u32håndtak, / * håndtak * /
HI_ U32 u32datatype, / * datatype, video- eller lyddata eller lydvideo komposittdata * /
HI_ U8 * pu8buffer, / * data inneholder rammeoverskrift * /
HI_ U32 u32lengde, / * datalengde * /
HI_ Void * puserdata / * brukerdata * /
)
{
HI_ S_ AVFrame * pstruAV = HI_ NULL;
HI_ S_ SysHeader * pstruSys = HI_ NULL;
hvis (u32DataType == HI_ NET_ DEV_ AV_ DATA)
{
pstruAV = (HI_ S_ AVFrame *) pu8Buffer;
hvis (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ VIDEO_ FRAME_ FLAG)
{
hvis (fPusherHandle == 0) returnerer 0;
hvis (pstruAV-> u32AVFrameLen> 0)
{
usignert røye * pbuf = (usignert røye *) (pu8Buffer + størrelse på (HI_ S_ AVFrame));
EASY_ AV_ Ramme avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
avFrame.u32AVFrameLen = pstruAV-> u32AVFrameLen;
avFrame.pBuffer = (usignert røye *) 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_ FLAG;
avFrame.u32TimestampSec = pstruAV-> u32AVFramePTS / 1000;
avFrame.u32TimestampUsec = (pstruAV-> u32AVFramePTS% 1000) * 1000;
EasyPusher_ PushFrame (fPusherHandle, & avFrame);
}
}
ellers
hvis (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ AUDIO_ FRAME_ FLAG)
{
hvis (fPusherHandle == 0) returnerer 0;
hvis (pstruAV-> u32AVFrameLen> 0)
{
// Ulike IP-kamera, dataoverskriften er forskjellig her, og den tilsvarende størrelsen må hoppes over i henhold til SDK-en. Noen har kanskje ikke tilpassede data
usignert røye * pbuf = (usignert røye *) (pu8Buffer + størrelse på (HI_ S_ AVFrame));
EASY_ AV_ Ramme avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
avFrame.u32AVFrameLen = pstruAV-> u32AVFrameLen-4; // Fjern den produsentdefinerte 4-byte-overskriften
avFrame.pBuffer = (usignert char *) pbuf + 4;
avFrame.u32AVFrameFlag = EASY_ SDK_ AUDIO_ FRAME_ FLAG;
avFrame.u32TimestampSec = pstruAV-> u32AVFramePTS / 1000;
avFrame.u32TimestampUsec = (pstruAV-> u32AVFramePTS% 1000) * 1000;
EasyPusher_ PushFrame (fPusherHandle, & avFrame);
}
}
}
ellers
hvis (u32DataType == HI_ NET_ DEV_ SYS_ DATA)
{
pstruSys = (HI_ S_ SysHeader *) pu8Buffer;
printf ("Video W:% u H:% u Audio:% u \ n", pstruSys-> struVHeader.u32Width, pstruSys-> struVHeader.u32Height, pstruSys-> struAHeader.u32Format);
}
returner HI_ SUCCESS;
}
Med datakilde kan du presse RTSP og RTMP live ved å ringe libeasypusher eller libeasyrtmp!
|
Skriv inn e-post for å få en overraskelse
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albansk
ar.fmuser.org -> arabisk
hy.fmuser.org -> armensk
az.fmuser.org -> aserbajdsjansk
eu.fmuser.org -> baskisk
be.fmuser.org -> hviterussisk
bg.fmuser.org -> Bulgarian
ca.fmuser.org -> katalansk
zh-CN.fmuser.org -> Kinesisk (forenklet)
zh-TW.fmuser.org -> Kinesisk (tradisjonell)
hr.fmuser.org -> Kroatisk
cs.fmuser.org -> tsjekkisk
da.fmuser.org -> dansk
nl.fmuser.org -> Nederlandsk
et.fmuser.org -> estisk
tl.fmuser.org -> filippinsk
fi.fmuser.org -> finsk
fr.fmuser.org -> French
gl.fmuser.org -> galisisk
ka.fmuser.org -> Georgisk
de.fmuser.org -> tysk
el.fmuser.org -> gresk
ht.fmuser.org -> haitisk kreolsk
iw.fmuser.org -> hebraisk
hi.fmuser.org -> hindi
hu.fmuser.org -> Ungarsk
is.fmuser.org -> islandsk
id.fmuser.org -> indonesisk
ga.fmuser.org -> Irsk
it.fmuser.org -> Italiensk
ja.fmuser.org -> japansk
ko.fmuser.org -> koreansk
lv.fmuser.org -> lettisk
lt.fmuser.org -> litauisk
mk.fmuser.org -> makedonsk
ms.fmuser.org -> malaysisk
mt.fmuser.org -> maltesisk
no.fmuser.org -> norsk
fa.fmuser.org -> persisk
pl.fmuser.org -> polsk
pt.fmuser.org -> portugisisk
ro.fmuser.org -> rumensk
ru.fmuser.org -> russisk
sr.fmuser.org -> serbisk
sk.fmuser.org -> Slovakisk
sl.fmuser.org -> Slovenian
es.fmuser.org -> spansk
sw.fmuser.org -> Swahili
sv.fmuser.org -> svensk
th.fmuser.org -> Thai
tr.fmuser.org -> tyrkisk
uk.fmuser.org -> ukrainsk
ur.fmuser.org -> urdu
vi.fmuser.org -> Vietnamesisk
cy.fmuser.org -> walisisk
yi.fmuser.org -> Yiddish
FMUSER Wirless Overfør video og lyd enklere!
Kontakt
Adresse:
No.305 Room HuiLan Building No.273 Huanpu Road Guangzhou Kina 510620
Type kategori
Nyhetsbrev