資源簡介
這里是利用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?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個文件信息
評論
共有 條評論