Stream edilen framlerden video oynatma VLC

Başlatan eacimen, 01 Temmuz 2019 - 15:44:08

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

eacimen

Herkese Merhaba

Ben bir proje için bir NETDVR cihazından stream edilen h264 formatıyla encode edilmiş video framleri alıyorum. Bu framlerin kayıt edildiği struct

typedef struct FrameHeadr
{
    unsigned char mediaType; //encoded (video/audio) media type:
    unsigned char *pData; //encoded data buffer
    unsigned int preBufSize; //pre buffer size, normally it is 12+4+12
    // (FIXED HEADER + Extence option + Extence bit)
    unsigned int dataSize; //actual buffer size pointed by pData
    unsigned char frameRate; //frame rate, used on receive part.
    unsigned int frameID; //fram id£¬used on receive part.
    unsigned int timeStamp; //time stamp, used on receive part.
    union
    {
        struct{
            int keyFrame; //I(1) or P(0)
            unsigned short videoWidth; //video width
            unsigned short videoHeight; //video height
        } videoParam;
        unsigned char audioMode; //8, 16, or 32 bit
    };
} FrameHeadr;

şeklinde.

Her frame geldiğinde bu stractan yükseklik ve genişlik gibi birkaç veriyi konsola yazıdıyorum ve çıktılar şu şekilde.
Ctrlprotocol Library Version: 1.0.1
Custommp4    Library Version: 1.0.1
NetDVR       Library Version: 1.0.1
startup successss.
create successss.
login successss.
getdeviceinfo success
devip=xxxx
REALHND=94407353553120
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162396, s=383
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162356, s=399
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162316, s=442
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162276, s=343
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162236, s=372
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162196, s=407
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162156, s=422
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162116, s=422
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162076, s=460
GETTING ENCODED FRAME STREAM-----------------------------------------!!!!
PFRAME w:352, h:288, t:-1968162036, s=459


Benim yapmak istediğim bu Framleri video olarak VLC'de oynatmak. Böyle * bir şey mümkün mü? Yardım edebilir misiniz?

Amenofis

Vlc ile nasıl olur bilmiyorum. Terminalden frame girişi olsa bile çok yavaş olur oynatamaz. Network bağlantısı ile olabilir gibi ama o konuda pek bilgim yok.

Vlc'nin yapımcısı tarafından libVLC diye bir api sunulmuş. Bununla decode edilebilir ama anladığım kadarıyla decode edilen resimler VLC içine değil dışarıya aktarılıyor. Yani resimleri göstermek için başka bir katman daha gerekli.

İlla vlc olması gerekmiyorsa en kolayı Qt Multimedia modülü. https://doc.qt.io/qt-5/videooverview.html

Dokümanda görüldüğü gibi resmi piksel piksel doldurmak için QVideoFrame diye bir sınıf mevcut.

eacimen

VLC olmak zorunda ne yazık ki. Günler süren araştırmaların sonunda in memory to vlc stream diye birşey buldum. Belki bu yolla Gelen framleri pointer olarak vlc'ye stream edebilirim. Onu deneyeceğim ama konu hakkında çok az kaynak var. Neredeyse hiç örnek yok. Bu yüzden başarabilir miyim bilmiyorum.