资源简介
这里是利用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\li
文件 2112 2018-03-28 16:24 FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\li
文件 870 2018-03-28 16:24 FFmpeg 获取网络摄像头数据解码\HK_test\HK_test\Debug\HK_test.tlog\li
文件 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个文件信息
相关资源
- Brainfuck / OoK 解码脚本
- Qt写的Windows下屏幕录制程序源码
- Windows下使用FFMPEG解码AAC文件并使用
- ffmpeg转换MP4为JPG帧图片
- ffmpeg解码sdl播放h264
- 最简单的利用ffmpeg获取视频的图片
- 最简单的基于FFmpeg的编码器 1.2
- vs2012调试ffmpeg.c
- 基于FFMPEG SDK流媒体开发1---解码媒体文
- ffmpeg 源码demo
- FFVideoPlyer_视频读帧解码播放.rar
- 最简单的基于FFMPEG的AVDevice的 1.2
- 最简单的基于FFMPEG的音频编码器 1.1
- 最简单的基于FFMPEG+SDL的视频播放器
- ffmpeg提取mp4关键帧保存为jpg.zip
- ffmpeg+qt的简单播放器
- 使用ffmpeg将多张图片生成H264裸流并获
- ffmpeg h264 转换jpg
- 利用FFmpeg将Jpeg图片转为任意视频容器
- ffmpeg exeWINXP的最后一个可运行版本
- 最简单的基于FFMPEG的视频编码器修正
- ffmpeg-vs2013
- 基于FFMPEG_SDL2_音视频播放_参考音频时
- ffmpeg-3.2-win32-shared.zip
- ffmpeg录音
- ffmpeg资料全
- ffmpeg_windows屏幕录制并编码成H264
- windows32位系统的ffmpeg
- 利用ffmpeg提取任意格式视频帧关键帧
- ffmpeg3.0源码
评论
共有 条评论