libvlc将rtsp流转为opencv的Mat结构

2017-09-04  本文已影响0人  zjh3029

1.rtsp流的处理

#include<opencv2\opencv.hpp>    
#include<vlc\vlc.h>

using namespace std;
using namespace cv;

int width = 640;
int height = 480;
static char* videobuf;

void *lock(void *data, void**p_pixels)
{
    *p_pixels = videobuf;
    return NULL;
}

void display(void*data,void *id)
{
    IplImage *img = cvCreateImage(CvSize(width, height), IPL_DEPTH_8U, 4);
    img->imageData = videobuf;
    //imshow("test", cvarrToMat(img));
    cvShowImage("test", img);
    waitKey(10);
    cvReleaseImage(&img);
}

void unlock(void *data, void *id, void *const *p_pixels)
{
    (void)data;
    assert(id==NULL);
}
int main() {
    libvlc_instance_t *instance;
    libvlc_media_t  *media;
    libvlc_media_player_t *media_player;

    videobuf = (char*)malloc((width*height) << 2);

    memset(videobuf,0,(width*height)<<2);
    
    instance = libvlc_new(0, NULL);

    media = libvlc_media_new_location(instance, "rtsp://192.168.68.1:8554/1");
    media_player = libvlc_media_player_new_from_media(media);
    libvlc_media_release(media);

    libvlc_video_set_callbacks(media_player, lock, unlock, display, NULL);
    libvlc_video_set_format(media_player, "RV32", width, height, width << 2);
    libvlc_media_player_play(media_player);

    while(1){}
    return 0;
}

2.一个简单的播放器处理流程:

#include<Windows.h>//windows的api
#include<vlc\vlc.h>
#include<iostream>
using namespace std;

int main()
{
    libvlc_instance_t *instance_vlc;
    libvlc_media_player_t *mediaplayer_vlc;
    libvlc_media_t *media_vlc;

    libvlc_time_t time_play;
    int width, height, waittime = 5000;
    
    instance_vlc=libvlc_new(0, NULL);
    media_vlc = libvlc_media_new_path(instance_vlc, "test.mp4");
    mediaplayer_vlc = libvlc_media_player_new_from_media(media_vlc);

    libvlc_media_release(media_vlc);
    libvlc_media_player_play(mediaplayer_vlc);

    Sleep(waittime);

    time_play = libvlc_media_player_get_length(mediaplayer_vlc);
    cout << "用时:"<<time_play << endl;

    width = libvlc_video_get_width(mediaplayer_vlc);
    height = libvlc_video_get_height(mediaplayer_vlc);
    Sleep(time_play - waittime);


    libvlc_media_player_stop(mediaplayer_vlc);
    libvlc_media_player_release(mediaplayer_vlc);
    libvlc_release(instance_vlc);
    return 0;

}
上一篇下一篇

猜你喜欢

热点阅读