libvlc将rtsp流转为opencv的Mat结构

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;

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • RFC 2326RTSP Spec中文版(1-11)RTSP Spec中文版(12-16)RTSP Spec中文版...
    SniperPan阅读 11,044评论 3 10
  • RTSP SDP RTP/RTCP 介绍应用层 RTSP、SDP; 传输层 RTP、TCP、UDP; 网络层 IP...
    Atom_Woo阅读 9,409评论 0 7
  • RTSP Spec中文版(1-11)RTSP Spec中文版(12-16)RTSP Spec中文版(附录) 12 ...
    SniperPan阅读 5,245评论 0 3
  • 第一部分:RTSP协议 一、RTSP协议概述 RTSP(Real-TimeStream Protocol )是一种...
    小鱼儿喜欢花无缺阅读 7,579评论 1 6
  • 搬到这里好久了,前有运输车,后有运输船,刚开始不习惯。它们的震动真的太大,但也不影响我入睡。 虽然跟第一任男友准备...
    加简之上阅读 2,394评论 1 0

友情链接更多精彩内容