【OpenCV】基於libvlc SDK和Opencv播放rtsp流
阿新 • • 發佈:2019-02-02
RTST流:使用vlc作為rtsp伺服器
vlc2.1.2
VS2013+OpenCV3.0
C++
1、編譯時記得匯入vlc 的vlc.dll、vlccore.dll和plugins資料夾,這些可從VLC官網下載安裝後匯入
2、需在VS2013對Opencv進行配置
#include <opencv2\opencv.hpp> #include <iostream> #include <string> #include"vlc.h" #include "stdafx.h" #include "string.h" using namespace cv; using namespace std; int VIDEO_WIDTH = 1024; int VIDEO_HEIGHT = 578; static char * videobuf = 0; string Vlc_Vertion=""; void *lock(void *data, void**p_pixels) { *p_pixels = videobuf; return NULL; } void display(void *data, void *id) { IplImage *img = cvCreateImage(cvSize(VIDEO_WIDTH, VIDEO_HEIGHT), IPL_DEPTH_8U, 4); img->imageData = videobuf; cvShowImage(libvlc_get_version(), img); cvWaitKey(10); cvReleaseImage(&img); } void unlock(void *data, void *id, void *const *p_pixels) { (void)data; assert(id == NULL); } int main() { cvNamedWindow("image", CV_WINDOW_AUTOSIZE); libvlc_media_t* media = NULL; libvlc_media_player_t* mediaPlayer = NULL; char const* vlc_args[] = { "-I", "dummy", "--ignore-config", }; Vlc_Vertion=libvlc_get_version(); videobuf = (char*)malloc((VIDEO_WIDTH * VIDEO_HEIGHT) << 2); memset(videobuf, 0, (VIDEO_WIDTH * VIDEO_HEIGHT) << 2); libvlc_instance_t* instance = libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args); media = libvlc_media_new_location(instance, "rtsp://192.168.200.20:8554/test"); mediaPlayer = libvlc_media_player_new_from_media(media); libvlc_media_release(media); //libvlc_media_player_set_media(mediaPlayer, media); libvlc_video_set_callbacks(mediaPlayer, lock, unlock, display, NULL); libvlc_video_set_format(mediaPlayer, "RV32", VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH<<2); libvlc_media_player_play(mediaPlayer); while (1) { } return 0; }
參考資料: