搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
煮酒与君饮
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
【wxauto库学习】微信简易聊天机器人搭建_autowx
2
RabbitMQ和Kafka的比较_kafka与rabbitmq对比
3
栈(Stack)_栈的时间复杂度
4
python reload is not defined_name 'reload' is not defined解决方法
5
【python语言】第十四届蓝桥杯国赛 c/c++b组_蓝桥杯国赛c++b组
6
fastJson≤1.2.80漏洞修复_fastjson漏洞修复
7
数据指标的权重确定_主观赋权法
8
sqlmap的使用_sqlmap post请求
9
解锁乐趣:S905L-P211盒子刷入Android TV和EmuELEC 4.4/4.5的完整指南
10
windows平台编译CEF支持H264_cef h264
当前位置:
article
> 正文
ffmpeg解码h264文件
作者:煮酒与君饮 | 2024-07-30 02:23:51
赞
踩
ffmpeg解码h264文件
// FfmpegCode.cpp: implementation of the CFfmpegCode class.
//
//
#include "stdafx.h"
#include "smartdev.h"
#include "FfmpegCode.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
CFfmpegCode::CFfmpegCode()
{
m_iWidth = 320;
m_iHeight = 240;
}
CFfmpegCode::~CFfmpegCode()
{
}
void CFfmpegCode::FfmpegInit()
{
//注册解码器,并且找到H264解码器
avcodec_init();
avcodec_register_all();
m_pAVCodec = avcodec_find_decoder(CODEC_ID_H264);
//分配解码器内存
m_pAVCodecContext = avcodec_alloc_context();
//3.打开解码器
avcodec_open(m_pAVCodecContext, m_pAVCodec);
//分配解码器用的帧缓冲
m_pAVFrame = avcodec_alloc_frame();
if(m_pAVCodec->capabilities&CODEC_CAP_TRUNCATED)
m_pAVCodecContext->flags|= CODEC_FLAG_TRUNCATED;
}
int CFfmpegCode::SwsScale(struct SwsContext *context,uint8_t* dst[], int dstStride[])
{
return sws_scale(context,m_pAVFrame->data,m_pAVFrame->linesize,0, m_iHeight, dst, dstStride);
}
void CFfmpegCode::H264DecodeTest(CClientDC &dc,int x,int y,int width,int high,CString filePath)
{
FfmpegInit();
CDC MemDC;
CBitmap DrawBitmap;
MemDC.CreateCompatibleDC(&dc);
DrawBitmap.CreateCompatibleBitmap(&dc,width,high);
MemDC.SelectObject(DrawBitmap);
MemDC.SetBkMode(TRANSPARENT);
unsigned char* pRGB = (unsigned char*)malloc(320*240*4);
int frame, size, got_picture, len;
uint8_t inbuf[4096 + FF_INPUT_BUFFER_PADDING_SIZE], *inbuf_ptr;
/* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
memset(inbuf + 4096, 0, FF_INPUT_BUFFER_PADDING_SIZE);
FILE *pFile;
pFile = fopen(filePath, "rb");
if (!pFile)
{
fprintf(stderr, "could not open %s\n", filePath.GetBuffer(0));
return;
}
frame = 0;
while (1)
{
size = fread(inbuf, 1, 4096, pFile);
if (size == 0)
break;
inbuf_ptr = inbuf;
while (size>0)
{
len = DecodeVideo(&got_picture,inbuf_ptr, size);
if (len < 0)
{
printf("Error while decoding frame %d\n",frame);
return;
}
if (got_picture)
{
printf("saving frame %3d\n", frame);
SwsContext* pSwsCxt = SwsGetContext(PIX_FMT_YUV420P,PIX_FMT_RGB32, SWS_BILINEAR);
BYTE *rgb_src[3]= {pRGB, NULL, NULL};
int rgb_stride[3]={4*width, 0, 0};
int iResult = SwsScale(pSwsCxt,rgb_src,rgb_stride);
DrawBitmap.SetBitmapBits(153600*2,(void*)pRGB);
dc.BitBlt(0,0,width,high,&MemDC,0,0,SRCCOPY);
frame++;
}
size -= len;
inbuf_ptr += len;
Sleep(100);
}
}
free(pRGB);
FfmpegClose();
}
int CFfmpegCode::DecodeVideo(int *got_picture_ptr, uint8_t *buf, int buf_size)
{
return avcodec_decode_video(m_pAVCodecContext, m_pAVFrame, got_picture_ptr, buf, buf_size);
}
void CFfmpegCode::FfmpegClose()
{
//关闭解码器,释放解码器内存
if(m_pAVCodecContext)
{
avcodec_close(m_pAVCodecContext);
av_free(m_pAVCodecContext);
m_pAVCodecContext = NULL;
}
//释放解码画面内存
if(m_pAVFrame)
{
av_free(m_pAVFrame);
m_pAVFrame = NULL;
}
}
struct SwsContext* CFfmpegCode::SwsGetContext(int srcFormat,int dstFormat, int flags)
{
return sws_getContext(m_iWidth,m_iHeight,srcFormat,m_iWidth,m_iHeight,dstFormat,flags,NULL,NULL,NULL);
}
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/煮酒与君饮/article/detail/901584
推荐阅读
article
ffmpeg
.
c
(
4.3
.1)
源码
剖析
_
ffmpeg
源码
...
本文对
ffmpeg
.
c
源码
进行学习及剖析。
_
ffmpeg
源码
ffmpeg
源码
...
赞
踩
article
最全【
FFmpeg
+Qt开发】
解码
流程
详细分析
+代码示例
_
qt
ffmpeg
(1)
,
2024年最新...
封装格式上下文结构体
,
也是统领全局的结构体
,
保存了视频文件封装格式相关信息。每种封装格式(例如FLV, MKV, MP4...
赞
踩
article
【
FFmpeg
+Qt开发】
解码
流程
详细分析
+代码示例
_
qt
ffmpeg
(
1
)
_
ffmpeg
qt...
封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。(img-AaMAYdW2-
1
7
1
5797
1
...
赞
踩
article
FFMPEG
之
parser
一文搞懂
FFMPEG
分帧、组帧
Framimg
_
ffmpeg
par...
FFMPEG
之
parse
_
packet前言 现实世界中的声音图像采样后经过音视频压缩技术压缩而成的码流称为ES流(E...
赞
踩
article
【
FFmpeg
_SDL_MFC】1、
FFMPEG
视频
解码器
_
mfc
ffmpeg
...
三章
FFmpeg
视频
解码器
目录•
视频
解码知识• VC下
FFmpeg
开发环境的搭建• 示例程序运行•
FFmpeg
解码的...
赞
踩
article
Linux
下 编译
FFmpeg
支持
G711
+
H264
写入 mp4_
linux
g711
...
最近需要将 window 动态库移植到
linux
下,所以在
linux
下,编译了一下 ffmpeg , 在此记录下编译...
赞
踩
article
Linux
onvif
协议实现三(
h264
转
MP4
文件保存)_
linux
h264
转
mp4...
创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心...
赞
踩
article
海思
HI3531D
使用
ffmpeg
实时封装多路
H264
视频+
AAC
音频为MP4_
海思
ffmpeg
...
零、前提:多路实时封装
H264
裸码流和
AAC
音频到
mp4
容器,不涉及编解码方面。第一次做视音频方面项目,以此文做个笔记。...
赞
踩
article
基于
FFmpeg
H264
+
G711A
音
视频
裸流
合并 MP4
文件
(
G711A
转
AAC
)...
由于
FFmpeg
只支持
H264
+
AAC
的mp4封装格式的,并不支持
H264
+G711的mp4封装格式。所以需要将G7...
赞
踩
article
基于
FFmpeg
H264
+
G711A
音视频裸流合并 MP4文件 (
G711A
转 AAC)...
https://blog.csdn.net/haiyangyunbao813/article/details/10178...
赞
踩
article
qt下
ffmpeg
录制
mp4
经验分享,支持音视频(
h264
、
h265
,
AAC
,
G711
aLaw, ...
MP4,是最常见的国际通用格式,在常见的播放软件中都可以使用和播放,磁盘空间占地小,画质一般清晰,它本身是支持
h264
、...
赞
踩
article
Window10
VS2017
编译
FFmpeg
支持 G711 + H264 写入
mp4
_...
由于工作需要,所有决定自己重新
编译
FFmpeg
. 不编不知道,一编吓一跳。尼玛,全是坑。因此在此记录下我在
编译
的过程中遇...
赞
踩
article
windows
下
编译
ffmpeg
(包含
编译
x264
)_
windows
终端
ffmpeg
x2...
windows
下
编译
ffmpeg
和
x264
_
windows
终端
ffmpeg
x264
库
编译
使用
示例
windows
...
赞
踩
article
VS2017
+
FFmpeg
+
SDL
实现ts
流
解码
播放_
ffmepg
解码
ts
流
调用...
1
VS2017
环境配置下载
FFmpeg
dev和share两个版本将dev文件下的include 和 lib 文件夹...
赞
踩
article
ffmpeg
:
windows
编译
及
使用
(
vs2019
编译
)
_
ffmpeg
之
windows
平台
编译
...
本章节记录在Windows上
编译
ffmpeg
的过程及
编译
过程的问题,并
使用
编译
库编写测试程序验证是否可用。在window...
赞
踩
article
移植
mp4
v2
开源库,
h264
+
g711
a/
g711
u编码
mp4
_
mp4
v2
h.264+
g711
...
1、
mp4
v2
移植 step1、下载:https://launchpad.net/ubuntu/+source/
mp4
v...
赞
踩
article
win
10
系统下编译
FFMPEG
+
QSV
(
x64
)_
win
ffmpeg
qsv
...
一、准备工具:1、msys2-x86_64-XXXX.exe 获取地址(官网):MSYS2Software Distri...
赞
踩
article
【
FFmpeg
】
ffmpeg
命令行
参数
⑦ ( 使用
FFmpeg
提取
PCM
音频数据 | P...
一、使用
FFmpeg
提取
PCM
音频数据1、
PCM
音频格式
2、
提取
PCM
音频格式
常用
参数
3、
提取
PCM
音...
赞
踩
article
windows
平台编译
CEF
支持
H264
_
cef
h264...
windows
平台编译
CEF
支持
H264
。_
cef
h264
cef
h264 ...
赞
踩
article
Linux平台下
cef
&
chromium
编译
--
加入对
h264
的支持_
cef
linux
h264
...
背景: 在
cef
上进行二次开发,发现默认不只支持
h264
解码。需要重新编译
chromium
解决。步骤: https://...
赞
踩
相关标签
ffmpeg
c语言
c++
学习
物联网
嵌入式硬件
面试
linux
Linux
onvif
写MP4文件头返回-22
h264转为MP4
FFmpeg
H264 + G711a
MP4文件
音视频
qt
windows