资源简介
开发环境:win7+VS2013+opencv3.0
两个线程,X264实时编码入队列,另一个线程FFmpeg从队列中取出数据实时解码。
代码片段和文件信息
#include
#include
// Opencv
#include
#include
#include
#include
#include
#include “queue.h“
extern “C“
{
#include “libavcodec/avcodec.h“
#include “libswscale/swscale.h“
};
using namespace std;
using namespace cv;
//test different codec
#define TEST_H264 0
#define TEST_HEVC 1
extern DWORD WINAPI x264_encode(LPVOID pM);
bool get_h264_data(uchar* bufint in_lenuchar* out_buf int &out_len)
{
char nalu[4] = { 0x00 0x00 0x00 0x01 };
memcpy(out_buf nalu 4);
out_buf += 4;
memcpy(out_buf buf in_len);
out_len = in_len + 4;
// cout << “out_len = “ < return true;
}
int main(int argc 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 x264_encode (LPVOID)result_link 0 NULL);
Sleep(1);
//system(“pause“);
#if 1
Mat pCvMat;
AVCodec *pCodec;
AVCodecContext *pCodecCtx = NULL;
AVCodecParserContext *pCodecParserCtx = NULL;
int frame_count;
FILE *fp_in;
FILE *fp_out;
AVframe *pframe *pframeYUV;
uint8_t *out_buffer;
// const int in_buffer_size = 4096;
const int in_buffer_size = 800000;
//uint8_t in_buffer[in_buffer_size + FF_INPUT_BUFFER_PADDING_SIZE] = { 0 };
uint8_t in_buffer[in_buffer_size];
memset(in_buffer 0 sizeof(in_buffer));
uint8_t *cur_ptr;
int cur_size;
AVPacket packet;
int ret got_picture;
int y_size;
AVCodecID codec_id = AV_CODEC_ID_H264;
// char filepath_in[] = “test.h264“;
// char filepath_out[] = “1.yuv“;
int first_time = 1;
struct SwsContext *img_convert_ctx;
//av_log_set_level(AV_LOG_DEBUG);
avcodec_register_all();
pCodec = avcodec_find_decoder(codec_id);
if (!pCodec) {
printf(“Codec not found\n“);
return -1;
}
pCodecCtx = avcodec_alloc_context3(pCodec);
if (!pCodecCtx){
printf(“Could not allocate video codec context\n“);
return -1;
}
pCodecParserCtx = av_parser_init(codec_id);
if (!pCodecParserCtx){
printf(“Could not allocate video parser context\n“);
return -1;
}
if (pCodec->capabilities&CODEC_CAP_TRUNCATED)
pCodecCtx->flags |= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */
if (avcodec_open2(pCodecCtx pCodec NULL) < 0) {
printf(“Could not open codec\n“);
return -1;
}
#if 0
//Input File
fp_in = fopen(filepath_in “rb“);
if (!fp_in) {
printf(“Could not open input stream\n“);
return -1;
}
//Output File
fp_out = fopen(filepath_out “wb“);
if (!fp_out) {
printf(“Could not open output YUV file\n“);
return -1;
}
#endif
pframe = av_frame_alloc();
av_init_packet(&packet);
/******************************************************************************
* add by zhouyuhua@ict.ac.cn 保存BGR,opencv中是按BGR来保存的
*****
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 18936320 2014-05-06 10:08 ffmpeg_decode\Debug\avcodec-55.dll
文件 418304 2014-05-06 10:08 ffmpeg_decode\Debug\avutil-52.dll
文件 86016 2018-03-07 09:04 ffmpeg_decode\Debug\ffmpeg_decode.exe
文件 561768 2018-03-07 09:04 ffmpeg_decode\Debug\ffmpeg_decode.ilk
文件 1339392 2018-03-07 09:04 ffmpeg_decode\Debug\ffmpeg_decode.pdb
文件 47776 2011-02-08 03:46 ffmpeg_decode\Debug\libgcc_s_dw2-1.dll
文件 1472696 2018-02-08 14:34 ffmpeg_decode\Debug\libx264-142.dll
文件 434176 2014-05-06 10:08 ffmpeg_decode\Debug\swscale-2.dll
文件 25 2014-12-26 22:44 ffmpeg_decode\ffmpeg_decode\.gitignore
文件 18936320 2014-05-06 10:08 ffmpeg_decode\ffmpeg_decode\avcodec-55.dll
文件 418304 2014-05-06 10:08 ffmpeg_decode\ffmpeg_decode\avutil-52.dll
文件 1209 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.Build.CppClean.log
文件 4313 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.log
文件 2554 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\cl.command.1.tlog
文件 61190 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\CL.read.1.tlog
文件 2092 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\CL.write.1.tlog
文件 178 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\ffmpeg_decode.lastbuildstate
文件 1808 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\li
文件 2684 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\li
文件 886 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\ffmpeg_decode.tlog\li
文件 218712 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\main.obj
文件 133044 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\queue.obj
文件 1248256 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\vc120.idb
文件 823296 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\vc120.pdb
文件 212340 2018-03-07 09:04 ffmpeg_decode\ffmpeg_decode\Debug\x264_encode.obj
文件 4701 2018-02-08 15:38 ffmpeg_decode\ffmpeg_decode\ffmpeg_decode.vcxproj
文件 1514 2018-02-08 15:38 ffmpeg_decode\ffmpeg_decode\ffmpeg_decode.vcxproj.filters
文件 165 2017-12-20 16:34 ffmpeg_decode\ffmpeg_decode\ffmpeg_decode.vcxproj.user
文件 5721 2012-05-23 20:03 ffmpeg_decode\ffmpeg_decode\include\inttypes.h
文件 175612 2017-12-21 10:08 ffmpeg_decode\ffmpeg_decode\include\libavcodec\avcodec.h
............此处省略98个文件信息
- 上一篇:乒乓球王者
- 下一篇:ssm框架租房管理系统
相关资源
- FFmpeg API读取视音频文件信息的一个工
- 使用FFmpeg采集摄像头图像和麦克风音
- opencv_ffmpeg249.dll
- 自学编程创新意:livecoding.tv实时直播
- DS1302时钟带可调时间显示
- 基于嵌入式实时操作系统的程序设计
- FFmpeg-3.1 windows vs2013编译动态库静态库
- 基于FFmpeg4.0.2的AAC编码器
- FFmpeg获取网络摄像头数据解码
- Qt写的Windows下屏幕录制程序源码
- Windows下使用FFMPEG解码AAC文件并使用
- ffmpeg转换MP4为JPG帧图片
- ffmpeg解码sdl播放h264
- spark streaming技术内幕与源码剖析
- 最简单的利用ffmpeg获取视频的图片
- 最简单的基于FFmpeg的编码器 1.2
- vs2012调试ffmpeg.c
- 基于FFMPEG SDK流媒体开发1---解码媒体文
- ffmpeg 源码demo
- 最简单的基于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
评论
共有 条评论