• 大小: 8.51MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-31
  • 语言: 其他
  • 标签: ffmpeg  解码  

资源简介

这里是利用FFmpeg获取网络摄像头的数据,然后解码播放。 开发环境:win7+opencv3.0+ffmpeg+VS2013

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include “queue.h“

extern “C“
{
#include 
#include 
#include 
}

#pragma comment(lib “avcodec.lib“)
#pragma comment(lib “avformat.lib“)
#pragma comment(lib “avutil.lib“)
#pragma comment(lib “swscale.lib“)

using namespace std;
using namespace cv;

DWORD WINAPI opencv_imshow(LPVOID lparam)
{
result_link_type* result_link = (result_link_type*)lparam;
struct result_node_datatype *result_node2 = NULL;
while (1)
{
result_node2 = result_pop(result_link);
if (result_node2 == NULL)
{
Sleep(1);
continue;
}
imshow(“frame“ result_node2->result);
waitKey(1);
}
}

int main(int argc const char * argv[])
{
HANDLE thread1;
result_link_type *result_link = new result_link_type;
result_link->head = result_link->end = NULL;
result_link->result_num = 0;
thread1 = CreateThread(NULL 0 opencv_imshow (LPVOID)result_link 0 NULL);

int i;
int videoStream;
int frameFinished;
int numBytes;
int ret;
int got_picture;
long prepts = 0;
bool first_time = true;

AVCodec *pCodec;
AVframe *pframe;
AVframe *pframeRGB;
AVPacket packet;
AVCodecContext *pCodecCtx;
AVFormatContext *pFormatCtx = NULL;//结构体AVFormatContext:包含码流参数较多

static struct SwsContext *img_convert_ctx;

uint8_t *buffer;
Mat pCvMat;

char filepath[] = “rtsp://admin:jdh123456@10.170.6.187/axis-media/media.amp?camera=2“;//码流的获取路径

av_register_all();//注册编解码器
avformat_network_init();//加载socket库以及网络加密协议相关的库

if (avformat_open_input(&pFormatCtx filepath NULL NULL) != 0)//打开多媒体数据并且获得信息
{
return -1;
}

if (avformat_find_stream_info(pFormatCtx NULL) < 0)//读取视音频数据并且获得信息
{
return -1;
}

av_dump_format(pFormatCtx 0 argv[1] false);//手工调试函数,看到pFormatCtx->streams的内容

videoStream = -1;

for (i = 0; i < pFormatCtx->nb_streams; i++)
{
if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
videoStream = i;
break;
}
}

if (videoStream == -1)
{
return -1;
}

pCodecCtx = pFormatCtx->streams[videoStream]->codec;

pCodec = avcodec_find_decoder(pCodecCtx->codec_id);//查找解码器

if (pCodec == NULL)
{
return -1;
}

if (avcodec_open2(pCodecCtx pCodec 0) < 0)//初始化AVCodecContext
{
return -1;
}

if (pCodecCtx->time_base.num > 1000 && pCodecCtx->time_base.den == 1)
{
pCodecCtx->time_base.den = 1000;
}

pframe = av_frame_alloc();//分配内存
pframeRGB = av_frame_alloc();

i = 0;
while (1)
{
if (av_read_frame(pFormatCtx &packet) >= 0)//读取码流中的音频若干帧或者视频一帧
{
if (packet.stream_index == videoStream)
{
ret = avcodec_decode_video2(pCodecCtx pframe &got_picture &packet);//开始解码
if (ret < 0)
{
printf(“Decode Error.(解码错误)\n“);
return ret;
}
if (got_picture)//解码成功

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      74752  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\Debug\HK_test.exe

     文件     474708  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\Debug\HK_test.ilk

     文件    1495040  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\Debug\HK_test.pdb

     文件       1180  2018-03-28 15:54  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.Build.CppClean.log

     文件       2710  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.log

     文件     202433  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.obj

     文件       3130  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\cl.command.1.tlog

     文件      38322  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\CL.read.1.tlog

     文件       2134  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\CL.write.1.tlog

     文件        220  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\HK_test.lastbuildstate

     文件       3062  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\link.command.1.tlog

     文件       2112  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\link.read.1.tlog

     文件        870  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\link.write.1.tlog

     文件     153163  2018-03-28 15:58  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\queue.obj

     文件    1477632  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\vc120.idb

     文件     815104  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\vc120.pdb

     文件       4525  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\HK_test.cpp

     文件       4184  2018-03-28 15:54  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\HK_test.vcxproj

     文件       1155  2018-03-28 15:49  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\HK_test.vcxproj.filters

     文件        837  2018-03-27 21:22  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\queue.cpp

     文件        602  2018-03-08 10:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\queue.h

     文件   39714816  2018-03-28 16:54  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test.sdf

     文件        967  2018-03-28 15:42  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test.sln

    ..A..H.     23040  2018-03-28 16:54  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test.v12.suo

     目录          0  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog

     目录          0  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug

     目录          0  2018-03-28 15:54  FFmpeg 获取网络摄像头数据解码\HK_test\Debug

     目录          0  2018-03-28 16:24  FFmpeg 获取网络摄像头数据解码\HK_test\HK_test

     目录          0  2018-03-28 16:54  FFmpeg 获取网络摄像头数据解码\HK_test

     目录          0  2018-03-28 15:56  FFmpeg 获取网络摄像头数据解码

............此处省略3个文件信息

评论

共有 条评论