FMUSER Wirless Transmit Video and Audio Máis fácil!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikaans
sq.fmuser.org -> Albanés
ar.fmuser.org -> árabe
hy.fmuser.org -> Armenian
az.fmuser.org -> azerí
eu.fmuser.org -> éuscaro
be.fmuser.org -> bielorruso
bg.fmuser.org -> Búlgaro
ca.fmuser.org -> catalán
zh-CN.fmuser.org -> chinés (simplificado)
zh-TW.fmuser.org -> Chinés (tradicional)
hr.fmuser.org -> croata
cs.fmuser.org -> Checo
da.fmuser.org -> danés
nl.fmuser.org -> Holandés
et.fmuser.org -> estoniano
tl.fmuser.org -> filipino
fi.fmuser.org -> finés
fr.fmuser.org -> Francés
gl.fmuser.org -> galego
ka.fmuser.org -> xeorxiano
de.fmuser.org -> alemán
el.fmuser.org -> Grego
ht.fmuser.org -> crioulo haitiano
iw.fmuser.org -> Hebreo
hi.fmuser.org -> hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> islandés
id.fmuser.org -> indonesio
ga.fmuser.org -> irlandés
it.fmuser.org -> Italiano
ja.fmuser.org -> xaponés
ko.fmuser.org -> coreano
lv.fmuser.org -> letón
lt.fmuser.org -> Lituano
mk.fmuser.org -> macedonio
ms.fmuser.org -> malaio
mt.fmuser.org -> maltés
no.fmuser.org -> Norwegian
fa.fmuser.org -> persa
pl.fmuser.org -> polaco
pt.fmuser.org -> Portugués
ro.fmuser.org -> Romanés
ru.fmuser.org -> ruso
sr.fmuser.org -> serbio
sk.fmuser.org -> Eslovaco
sl.fmuser.org -> Esloveno
es.fmuser.org -> castelán
sw.fmuser.org -> Suahili
sv.fmuser.org -> Sueco
th.fmuser.org -> Thai
tr.fmuser.org -> turco
uk.fmuser.org -> ucraíno
ur.fmuser.org -> urdú
vi.fmuser.org -> Vietnamita
cy.fmuser.org -> galés
yi.fmuser.org -> Yiddish
H264
A estrutura de Nalu é Nalu e a estrutura de Nalu é nal head + rbsp. O fluxo de datos na transmisión real móstrase na figura:
Aquí está a descrición da imaxe
A cabeceira nal representa un byte e os bits inferiores de 5 bits representan o tipo nal, como se mostra na seguinte táboa:
Tipo NAL | Tipo Nal |
0 | non utilizados |
un | Películas non IDR |
dous | Cortar datos nunha partición |
tres | Cortar partición de datos B |
catro | Partición de cortes de datos C. |
cinco | A película da imaxe IDR |
seis | Unidade de información de mellora complementaria (SEI) |
sete | Conxunto de parámetros de secuencia (SPS) |
oito | Conxunto de parámetros de imaxe (PPS) |
nove | Marca de demarcación |
dez | Fin de secuencia |
once | Fin do fluxo |
doce | cubrir |
13..23 | reter |
24..31 | Sen reserva |
RBSP é a carga de secuencia de bytes orixinal.
Se o tipo nal é 5, o marco é marco I, é dicir, marco clave e marco non clave (marco P ...) cando o tipo é 1.
No marco de datos H264 real, o tipo nal do marco adoita ir precedido dun separador 00, 001 ou 00001. En xeral, os primeiros datos de trama compilados polo codificador son PPS e SPS, seguidos do fotograma I e despois do fotograma P
Emisión de transmisión de vídeo Easypusher / easytmp
Easypusher e easytmp úsanse para obter fluxo de vídeo H264 e fluxo de audio a local como fonte de vídeo chamando ao SDK da cámara, tirando o fluxo RTSP, lendo o ficheiro MP4, etc. e despois empurrándoos ao servidor multimedia en streaming por RTSP e RTMP. Todos son programas push de transmisión de vídeo que admiten Windows, Linux, Android, IOS, arm e outras plataformas.
A continuación descríbese como distinguen o fotograma I e o fotograma P despois de que o fluxo de vídeo sexa local e logo os empurre:
// Este código le os datos H264 do ficheiro e empúxaos ao servidor
unsigned char * ptr = new unsigned char [sample_ size];
fread (ptr, mostra_ tamaño, 1, g_ aleta);
// Escribir un marco de datos: pódese empuxar directamente na rede
// fwrite (ptr, mostra_ tamaño, 1, fout);
EASY_ AV_ Frame avFrame;
memset (& avFrame, 0x00, sizeof (EASY_ AV_ Frame));
/*
* Os primeiros 4 bytes de PTR son o carácter de división de fotogramas 0000001 e o quinto byte é de tipo nal
*/
unsigned char naltype = ((unsigned char) ptr [4] & 0x1F);
avFrame.pBuffer = (sen caracteres *) ptr;
avFrame.u32AVFrameLen = mostra_ tamaño;
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);
Se a fonte de vídeo non é un ficheiro, senón un fluxo de cámara IP ou RTSP, é posible que xa informasen ao fotograma actual se o fotograma actual é un fotograma I ou un fotograma P na súa modulación de retransmisión de vídeo, polo que os pasos para xulgar o omítese o tipo.
HI_ S32 NETSDK_ APICALL OnStreamCallback (HI_ U32 u32handle, / * handle * /
HI_ U32 u32datatype, / * tipo de datos, datos de vídeo ou audio ou datos compostos de audio e vídeo * /
HI_ U8 * pu8buffer, / * os datos conteñen o encabezado do marco * /
HI_ U32 u32length, / * data length * /
HI_ Void * puserdata / * datos de usuario * /
)
{
HI_ S_ AVFrame * pstruAV = HI_ NULL;
HI_ S_ SysHeader * pstruSys = HI_ NULL;
if (u32DataType == HI_NET_DEV_AV_DATA)
{
pstruAV = (HI_ S_ AVFrame *) pu8Buffer;
if (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ VIDEO_ FRAME_ FLAG)
{
if (fPusherHandle == 0) devolve 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 = (sen caracter *) 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);
}
}
outro
if (pstruAV-> u32AVFrameFlag == HI_ NET_ DEV_ AUDIO_ FRAME_ FLAG)
{
if (fPusherHandle == 0) devolve 0;
if (pstruAV-> u32AVFrameLen> 0)
{
// Diferentes cámaras IP, a cabeceira de datos é diferente aquí e cómpre omitir o tamaño correspondente segundo o seu SDK. É posible que algúns non teñan datos personalizados
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; // Eliminar a cabeceira de 4 bytes definida polo fabricante
avFrame.pBuffer = (sen signo *) pbuf + 4;
avFrame.u32AVFrameFlag = EASY_ SDK_ AUDIO_ FRAME_ FLAG;
avFrame.u32TimestampSec = pstruAV-> u32AVFramePTS / 1000;
avFrame.u32TimestampUsec = (pstruAV-> u32AVFramePTS% 1000) * 1000;
EasyPusher_ PushFrame (fPusherHandle, & avFrame);
}
}
}
outro
if (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);
}
devolver HI_ ÉXITO;
}
Coa fonte de datos, pode empurrar RTSP e RTMP en directo chamando a libeasypusher ou libeasyrtmp.
|
Introduce o correo electrónico para obter unha sorpresa
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikaans
sq.fmuser.org -> Albanés
ar.fmuser.org -> árabe
hy.fmuser.org -> Armenian
az.fmuser.org -> azerí
eu.fmuser.org -> éuscaro
be.fmuser.org -> bielorruso
bg.fmuser.org -> Búlgaro
ca.fmuser.org -> catalán
zh-CN.fmuser.org -> chinés (simplificado)
zh-TW.fmuser.org -> Chinés (tradicional)
hr.fmuser.org -> croata
cs.fmuser.org -> Checo
da.fmuser.org -> danés
nl.fmuser.org -> Holandés
et.fmuser.org -> estoniano
tl.fmuser.org -> filipino
fi.fmuser.org -> finés
fr.fmuser.org -> Francés
gl.fmuser.org -> galego
ka.fmuser.org -> xeorxiano
de.fmuser.org -> alemán
el.fmuser.org -> Grego
ht.fmuser.org -> crioulo haitiano
iw.fmuser.org -> Hebreo
hi.fmuser.org -> hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> islandés
id.fmuser.org -> indonesio
ga.fmuser.org -> irlandés
it.fmuser.org -> Italiano
ja.fmuser.org -> xaponés
ko.fmuser.org -> coreano
lv.fmuser.org -> letón
lt.fmuser.org -> Lituano
mk.fmuser.org -> macedonio
ms.fmuser.org -> malaio
mt.fmuser.org -> maltés
no.fmuser.org -> Norwegian
fa.fmuser.org -> persa
pl.fmuser.org -> polaco
pt.fmuser.org -> Portugués
ro.fmuser.org -> Romanés
ru.fmuser.org -> ruso
sr.fmuser.org -> serbio
sk.fmuser.org -> Eslovaco
sl.fmuser.org -> Esloveno
es.fmuser.org -> castelán
sw.fmuser.org -> Suahili
sv.fmuser.org -> Sueco
th.fmuser.org -> Thai
tr.fmuser.org -> turco
uk.fmuser.org -> ucraíno
ur.fmuser.org -> urdú
vi.fmuser.org -> Vietnamita
cy.fmuser.org -> galés
yi.fmuser.org -> Yiddish
FMUSER Wirless Transmit Video and Audio Máis fácil!
contacto
dirección:
No.305 Sala HuiLan Building No.273 Huanpu Road Guangzhou China 510620
categorías
boletín informativo