簡體   English   中英

使用 libvlc 在 RTSP Streaming 中僅顯示第一幀

[英]Only first frame showed in RTSP Streaming with libvlc

我想通過 libVLC 獲取 IP 攝像機的視頻並將其流式傳輸到另一個 IP。 我根據 libvlc 文檔示例編寫了這些代碼。 視頻流成功,視頻在目的地顯示沒有任何問題。但在我的顯示器中,只顯示了第一幀。 經過一番搜索,我猜想通過添加RTP over TCP選項可以解決這個問題。 但是在這個改變之后,我的問題還沒有解決。

我使用 Microsoft Visual C++,我的代碼是:

#include <stdio.h>
 #include <stdlib.h>
 #include <vlc/vlc.h>
#include <Windows.h>
 int main(int argc, char* argv[])
 {
     libvlc_instance_t * inst;
     libvlc_media_player_t *mp;
     libvlc_media_t *m;


     char *myarg0 = "--sout=#transcode{vcodec=h264,scale=Auto,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=display,dst=rtp{sdp=rtsp://destinationIP:Port}}";
     char *myarg1="--rtsp-tcp"; 
     char *myargs[2] = {myarg1, myarg0};
     /* Load the VLC engine */
     inst = libvlc_new (2, myargs);

     /* Create a new item */
     char *input="http://user:pass@CameraIP//axis-cgi//mjpg//video.cgi";
     m = libvlc_media_new_location (inst,input ); 

     /* Create a media player playing environement */
     mp = libvlc_media_player_new_from_media (m);

     /* No need to keep the media now */
     libvlc_media_release (m);


     /* play the media_player */
     libvlc_media_player_play (mp);

     Sleep (10000000); /* Let it play a bit */

     /* Stop playing */
     libvlc_media_player_stop (mp);

     /* Free the media_player */
     libvlc_media_player_release (mp);

     libvlc_release (inst);

     return 0;
 }

這是我如何使用 QT 和 LIBVLC 訪問 RTSP 流,這運行良好!

libvlc_instance_t *_vlcinstance;
libvlc_media_player_t *_mp;
libvlc_media_t *_m;

const char * const vlc_args[] = {
       //   "--verbose=2", //be much more verbose then normal for debugging purpose
    "--network-caching=100",
};

//create a new libvlc instance
_vlcinstance=libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);  //tricky calculation of the char space used
// Create a media player playing environement
_mp = libvlc_media_player_new (_vlcinstance);


/* Create a new LibVLC media descriptor */
_m = libvlc_media_new_location(_vlcinstance, "rtsp://admin:admin@192.168.1.83:554/live0.264");
libvlc_media_player_set_media (_mp, _m);
/* Get our media instance to use our window */
int windid = ui->frame->winId();
libvlc_media_player_set_xwindow (_mp, windid );
/* Play */
libvlc_media_player_play (_mp);

其中“ui->frame”是目標對象,在我的應用程序中它是一個簡單的 QFrame(但可以是一切)

要編譯它,您需要 #include 並在項目設置中 LIBS += -lvlc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM