大致想法是:使用ffmpeg实现解码,解码后的数据转化为 Mat,调用 opencv中的函数显示,同时开启两个线程解码显示两路视频
<span style="font-size:18px;">
/**
* 抽取ffmpeg中的函数接口实现视频解码,再通过Opencv中的函数接口播放
*/
#define __STDC_CONSTANT_MACROS
#include <stdio.h>
#include <Windows.h>
#include <process.h>
// Opencv
#include <opencv/cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
extern "C"
{
#include "libavutil/avutil.h"
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
//新版里的图像转换结构需要引入的头文件
#include "libswscale/swscale.h"
};
using namespace cv;
//char* filename = "cuc_ieschool.flv";
char* filename[2] = {"720p.m2v", "cuc_ieschool.avi" };
DWORD WINAPI ffmpeg_decoder1(LPVOID pM)
{
AVCodec *pCodec; //解码器指针
AVCodecContext* pCodecCtx; //ffmpeg解码类的类成员
AVFrame* pAvFrame; //多媒体帧,保存解码后的数据帧
AVFormatContext* pFormatCtx; //保存视频流的信息
av_register_all(); //注册库中所有可用的文件格式和编码器
pFormatCtx = avformat_alloc_context();
char *filename = (char *)pM;
if (avformat_open_input(&pFormatCtx, filename, NULL, NULL) != 0) { //检查文件头部
printf("Can't find the stream!\n");
}
if (av_find_stream_info(pFormatCtx) < 0) { //查找流信息
printf("Can't find the stream information !\n");
}
int videoindex