Az FMUSER Wirless könnyebben továbbítja a videót és a hangot!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikaans
sq.fmuser.org -> albán
ar.fmuser.org -> arab
hy.fmuser.org -> örmény
az.fmuser.org -> azerbajdzsán
eu.fmuser.org -> baszk
be.fmuser.org -> belorusz
bg.fmuser.org -> bolgár
ca.fmuser.org -> katalán
zh-CN.fmuser.org -> kínai (egyszerűsített)
zh-TW.fmuser.org -> kínai (hagyományos)
hr.fmuser.org -> horvát
cs.fmuser.org -> cseh
da.fmuser.org -> dán
nl.fmuser.org -> holland
et.fmuser.org -> észt
tl.fmuser.org -> filippínó
fi.fmuser.org -> finn
fr.fmuser.org -> francia
gl.fmuser.org -> galíciai
ka.fmuser.org -> grúz
de.fmuser.org -> német
el.fmuser.org -> Görög
ht.fmuser.org -> haiti kreol
iw.fmuser.org -> héber
hi.fmuser.org -> hindi
hu.fmuser.org -> magyar
is.fmuser.org -> izlandi
id.fmuser.org -> indonéz
ga.fmuser.org -> ír
it.fmuser.org -> olasz
ja.fmuser.org -> japán
ko.fmuser.org -> koreai
lv.fmuser.org -> lett
lt.fmuser.org -> litván
mk.fmuser.org -> macedón
ms.fmuser.org -> maláj
mt.fmuser.org -> máltai
no.fmuser.org -> norvég
fa.fmuser.org -> perzsa
pl.fmuser.org -> lengyel
pt.fmuser.org -> portugál
ro.fmuser.org -> román
ru.fmuser.org -> orosz
sr.fmuser.org -> szerb
sk.fmuser.org -> szlovák
sl.fmuser.org -> Szlovén
es.fmuser.org -> spanyol
sw.fmuser.org -> szuahéli
sv.fmuser.org -> svéd
th.fmuser.org -> Thai
tr.fmuser.org -> török
uk.fmuser.org -> ukrán
ur.fmuser.org -> urdu
vi.fmuser.org -> Vietnámi
cy.fmuser.org -> walesi
yi.fmuser.org -> jiddis
H264
Nalu szerkezete Nalu, Nalu szerkezete nal fej + rbsp. A tényleges átviteli adatáramlást az ábra mutatja:
Itt van a kép leírása
A nal fejléc egy bájtot jelent, és az alsó 5 bites bitek a nal típusát képviselik, amint azt a következő táblázat mutatja:
NAL típus | Nal típus |
0 | nem használt |
egy | Nem IDR filmek |
kettő | Szeleteljen partíciót |
három | B szelet adatpartíció |
négy | Szelet C adatpartíció |
öt | Az IDR kép filmje |
hat | Kiegészítő kiegészítő információs egység (SEI) |
hét | Szekvencia paraméterkészlet (SPS) |
nyolc | Képparaméterkészlet (PPS) |
kilenc | Elhatárolási jel |
tíz | A sorozat vége |
tizenegy | A stream vége |
tizenkét | kitöltése |
13 .. 23 | megtartása |
24 .. 31 | Nincs foglalás |
Az RBSP az eredeti bájtsorozat terhelése.
Ha a nal típus 5, a keret I keret, azaz kulcskép, és nem kulcs keret (P keret ...), ha a típus 1.
A tényleges H264 adatkeretben a keret típusát általában egy 00, 001 vagy 00001 elválasztó előzi meg. Általánosságban elmondható, hogy az első kódoló által a kódoló által összeállított keretadat a PPS és az SPS, majd az I. keret, majd a P keret
Easypusher / easytmp videó streaming push
Az Easypusher és az easytmp segítségével a H264 videofolyamot és az audio videofolyamot helyi forrásként video forrásként lehet elérni a kamera SDK hívásával, az RTSP adatfolyam meghúzásával, az MP4 fájl olvasásával stb., Majd az RTSP és az RTMP segítségével a streaming média szerverre tolva. Ezek mind video streaming push programok, amelyek támogatják a Windows, Linux, Android, IOS, arm és más platformokat.
Az alábbiakban leírjuk, hogyan különböztetik meg az I keretet és a P keretet, miután a videofolyamot lokálissá tették, majd eltolták:
// Ez a kód beolvassa a fájlból a H264 adatokat, és a szerverre tolja őket
unsigned char * ptr = új aláíratlan char [minta_méret];
fread (ptr, minta_méret, 1, g_ fin);
// Adatkeret írása - közvetlenül a hálózatra tolható
// fwrite (ptr, minta_méret, 1, fout);
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
/*
* A PTR első 4 bájtja a 0000001 keretosztás karakter, az ötödik bájt pedig nal típusú
*/
aláíratlan char naltype = ((unsigned char) ptr [4] & 0x1F);
avFrame.pBuffer = (aláíratlan karakter *) ptr;
avFrame.u32AVFrameLen = minta_méret;
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);
Ha a videó forrása nem fájl, hanem IPcamera vagy RTSP adatfolyam, akkor valószínűleg már tájékoztatták az aktuális keretet arról, hogy a jelenlegi képkocka I vagy P keret a videó streaming visszamodulációjukban, ezért a nal megítélésének lépései típus el vannak hagyva.
HI_ S32 NETSDK_ APICALL OnStreamCallback (HI_ U32 u32handle, / * fogantyú * /
HI_ U32 u32datatype, / * adattípus, video- vagy audioadatok vagy audio-video összetett adatok * /
HI_ U8 * pu8buffer, / * az adatok tartalmazzák a keret fejlécét * /
HI_ U32 u32length, / * adathossz * /
HI_ érvénytelen * puserdata / * felhasználói adatok * /
)
{
HI_ S_ AVFrame * pstruAV = HI_ NULL;
HI_ S_ SysHeader * pstruSys = HI_ NULL;
ha (u32DataType == HI_ NET_ DEV_ AV_ DATA)
{
pstruAV = (HI_ S_ AVFrame *) pu8Buffer;
if (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ VIDEO_ FRAME_ FLAG)
{
ha (fPusherHandle == 0) visszatér 0;
if (pstruAV-> u32AVFrameLen> 0)
{
unsigned char * pbuf = (unsigned char *) (pu8Buffer + sizeof (HI_ S_ AVFrame));
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
avFrame.u32AVFrameLen = pstruAV-> u32AVFrameLen;
avFrame.pBuffer = (unsigned char *) 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);
}
}
más
if (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ AUDIO_ FRAME_ FLAG)
{
ha (fPusherHandle == 0) visszatér 0;
if (pstruAV-> u32AVFrameLen> 0)
{
// Különböző IPkamera, az adatfejléc itt más, és a megfelelő méretet ki kell hagyni az SDK szerint. Lehet, hogy egyesek nem rendelkeznek egyéni adatokkal
unsigned char * pbuf = (unsigned char *) (pu8Buffer + sizeof (HI_ S_ AVFrame));
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
avFrame.u32AVFrameLen = pstruAV-> u32AVFrameLen-4; // Távolítsa el a gyártó által megadott 4 bájtos fejlécet
avFrame.pBuffer = (aláíratlan karakter *) pbuf + 4;
avFrame.u32AVFrameFlag = EASY_ SDK_ AUDIO_ FRAME_ FLAG;
avFrame.u32TimestampSec = pstruAV-> u32AVFramePTS / 1000;
avFrame.u32TimestampUsec = (pstruAV-> u32AVFramePTS% 1000) * 1000;
EasyPusher_ PushFrame (fPusherHandle, & avFrame);
}
}
}
más
ha (u32DataType == HI_ NET_ DEV_ SYS_ DATA)
{
pstruSys = (HI_ S_ SysHeader *) pu8Buffer;
printf ("Videó W:% u H:% u Audio:% u \ n", pstruSys-> struVHeader.u32Width, pstruSys-> struVHeader.u32Height, pstruSys-> struAHeader.u32Format);
}
visszatér HI_ SIKER;
}
Az adatforrásokkal élőben nyomhatja az RTSP-t és az RTMP-t a libeasypusher vagy a libeasyrtmp hívásával!
|
Írja be az e-mail címet a meglepetéshez
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikaans
sq.fmuser.org -> albán
ar.fmuser.org -> arab
hy.fmuser.org -> örmény
az.fmuser.org -> azerbajdzsán
eu.fmuser.org -> baszk
be.fmuser.org -> belorusz
bg.fmuser.org -> bolgár
ca.fmuser.org -> katalán
zh-CN.fmuser.org -> kínai (egyszerűsített)
zh-TW.fmuser.org -> kínai (hagyományos)
hr.fmuser.org -> horvát
cs.fmuser.org -> cseh
da.fmuser.org -> dán
nl.fmuser.org -> holland
et.fmuser.org -> észt
tl.fmuser.org -> filippínó
fi.fmuser.org -> finn
fr.fmuser.org -> francia
gl.fmuser.org -> galíciai
ka.fmuser.org -> grúz
de.fmuser.org -> német
el.fmuser.org -> Görög
ht.fmuser.org -> haiti kreol
iw.fmuser.org -> héber
hi.fmuser.org -> hindi
hu.fmuser.org -> magyar
is.fmuser.org -> izlandi
id.fmuser.org -> indonéz
ga.fmuser.org -> ír
it.fmuser.org -> olasz
ja.fmuser.org -> japán
ko.fmuser.org -> koreai
lv.fmuser.org -> lett
lt.fmuser.org -> litván
mk.fmuser.org -> macedón
ms.fmuser.org -> maláj
mt.fmuser.org -> máltai
no.fmuser.org -> norvég
fa.fmuser.org -> perzsa
pl.fmuser.org -> lengyel
pt.fmuser.org -> portugál
ro.fmuser.org -> román
ru.fmuser.org -> orosz
sr.fmuser.org -> szerb
sk.fmuser.org -> szlovák
sl.fmuser.org -> Szlovén
es.fmuser.org -> spanyol
sw.fmuser.org -> szuahéli
sv.fmuser.org -> svéd
th.fmuser.org -> Thai
tr.fmuser.org -> török
uk.fmuser.org -> ukrán
ur.fmuser.org -> urdu
vi.fmuser.org -> Vietnámi
cy.fmuser.org -> walesi
yi.fmuser.org -> jiddis
Az FMUSER Wirless könnyebben továbbítja a videót és a hangot!
Kapcsolat
Cím:
No. 305 szoba HuiLan épület No.273 Huanpu Road Guangzhou, Kína 510620
Kategóriák
Hírlevél