社区
多媒体/流媒体开发
帖子详情
用ffmpeg解码出视频帧,放在AVFrame里,如何画在屏幕上
liahr
2010-06-30 09:57:47
如题,请大家指点,谢谢。
...全文
1936
20
打赏
收藏
用ffmpeg解码出视频帧,放在AVFrame里,如何画在屏幕上
如题,请大家指点,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
波_爷
2012-03-14
打赏
举报
回复
不知道你还在不在这里哦,关于这部分,我也向了解一下,就是视频解码出来后,显示那块,能不能用其他的东西做,就是显示部分自己做。
CyberLogix
2010-07-23
打赏
举报
回复
使用DDraw直接可以显示YUV数据,不需要进行YUV-RGB的转化
HersonX
2010-07-23
打赏
举报
回复
DDraw绘制,网上找一大堆。否则使用DirectShow写个RenderFilter,比较难。
周江涛
2010-07-21
打赏
举报
回复
不要以为你把30帧位图用双核的CPU播放出来了,就认为你的VGA驱动和你的播放牛B了
周江涛
2010-07-21
打赏
举报
回复
你试下1080P,30帧,GDI方式,再看看CPU占用,就知道有多恶心了,windows下快速显示还是得DX
[Quote=引用 14 楼 sxcong 的回复:]
一般,decode之后是YUV420,然后转成RGB24
显示就简单多了:
先填充BITMAPINFO结构体,宽高像素都知道,这一点很容易。
然后StretchDIBits
可能有时候发现图是倒立的,改高度为负数,或者解 yuv的时候,带个参数,把图像上下颠倒一下就行了。
顺便一提,GDI画图的速度还是很快的,每秒30帧VGA太轻松了。不知道所谓“慢的像蜗牛”的说法那位,你做过G……
[/Quote]
coloriy
2010-07-16
打赏
举报
回复
楼上的似乎所得比较正确,那live555收rtsp数据部分有没有人给点建议,还有ffmpeg解码后事YUV420吗
sxcong
2010-07-16
打赏
举报
回复
一般,decode之后是YUV420,然后转成RGB24
显示就简单多了:
先填充BITMAPINFO结构体,宽高像素都知道,这一点很容易。
然后StretchDIBits
可能有时候发现图是倒立的,改高度为负数,或者解 yuv的时候,带个参数,把图像上下颠倒一下就行了。
顺便一提,GDI画图的速度还是很快的,每秒30帧VGA太轻松了。不知道所谓“慢的像蜗牛”的说法那位,你做过GDI画图没有?你电脑VGA的速度是多少帧?假设电脑是P3 800,内存256M,也就是10年的大众配置。
coloriy
2010-07-16
打赏
举报
回复
解析的数据应该采用什么方式画在屏幕上,我说的是windows端?有没有人知道好方法,我以为也是直接画,楼上说会很慢??
周江涛
2010-07-07
打赏
举报
回复
[Quote=引用 11 楼 liahr 的回复:]
我不想使用SDL。
[/Quote]
老兄你不会想使用GDI/GDI+画在窗口上吧?那样会慢的像蜗牛
liahr
2010-07-03
打赏
举报
回复
我不想使用SDL。
liahr
2010-07-02
打赏
举报
回复
[Quote=引用 7 楼 warsour 的回复:]
引用 5 楼 liahr 的回复:
引用 3 楼 warsour 的回复:
ffmpeg源码里有个ffplay.c,是个简单的播放器,用的是sdl来播放你解出的数据,可以参考参考~
谢谢您的回复。
我是想在MFC的框架下播放一个视频,由于对windows编程了解甚少,所以才问了该问题。
SDL是可以跟mfc关联起来的,只用把SDL播放的窗口替换成MFC的窗体就行
[/Quote]
简单的说吧,使用哪个函数,把它画在屏幕上?
周江涛
2010-07-02
打赏
举报
回复
要显示出video,一个函数可不够.
SDL_SetVideoMode 这个可以打开SDL窗口
SDL_CreateYUVOverlay 这个创建YUV表面.也可以使用SDL_CreateRGBSurface来创建RGB表面
填充数据...
最后用SDL_DisplayYUVOverlay 这个把数据画到窗口上
warsour
2010-07-01
打赏
举报
回复
[Quote=引用 5 楼 liahr 的回复:]
引用 3 楼 warsour 的回复:
ffmpeg源码里有个ffplay.c,是个简单的播放器,用的是sdl来播放你解出的数据,可以参考参考~
谢谢您的回复。
我是想在MFC的框架下播放一个视频,由于对windows编程了解甚少,所以才问了该问题。
[/Quote]
SDL是可以跟mfc关联起来的,只用把SDL播放的窗口替换成MFC的窗体就行
max123456
2010-07-01
打赏
举报
回复
我的那段代码执行完后:lpOut 中就是你所要的数据,可以向他写入文件,也可能显示出来的,数据的类型根据参数PIX_FMT_YUYV422决定,如果你想要32位可以改为PIX_FMT_RGB32等等。
而且调用的函数全部是ffmpeg中的
warsour
2010-06-30
打赏
举报
回复
ffmpeg源码里有个ffplay.c,是个简单的播放器,用的是sdl来播放你解出的数据,可以参考参考~
liahr
2010-06-30
打赏
举报
回复
看不太明白。
加入说我现在使用MFC写了一个简单的程序,然后继承ffmpeg,解码后,得到了一个填充好的AVPacket结构:已经解码的数据,我把怎么样把这些数据绘制到屏幕上,来达到播放的目的呢?
max123456
2010-06-30
打赏
举报
回复
avpkt.data = lpData;
avpkt.size = iInLength;
iOutLength = 0;
while(avpkt.size > 0)
{
nlen = avcodec_decode_video2(m_CodecCtx, m_picture, &ngot_picture, &avpkt);
if (0 > nlen)
{
return;
}
if(ngot_picture)
{
avpicture_fill((AVPicture *)m_pFrameYUV, lpOut, PIX_FMT_YUYV422, m_CodecCtx->width, m_CodecCtx->height);
static struct SwsContext *img_convert_ctx = NULL;
if (!img_convert_ctx)
{
img_convert_ctx = sws_getContext(m_CodecCtx->width, m_CodecCtx->height,
m_CodecCtx->pix_fmt,
m_CodecCtx->width, m_CodecCtx->height,
PIX_FMT_YUYV422,
SWS_BICUBIC, NULL, NULL, NULL);
}
sws_scale(img_convert_ctx, m_picture->data, m_picture->linesize,
0, m_CodecCtx->height, m_pFrameYUV->data, m_pFrameYUV->linesize);
//SaveAsBMP(m_pFrameYUV, m_CodecCtx->width, m_CodecCtx->height, 0, 24);
iOutLength = m_CodecCtx->width * m_CodecCtx->height * 3;
}
avpkt.data += nlen;
avpkt.size -= nlen;
}
liahr
2010-06-30
打赏
举报
回复
[Quote=引用 3 楼 warsour 的回复:]
ffmpeg源码里有个ffplay.c,是个简单的播放器,用的是sdl来播放你解出的数据,可以参考参考~
[/Quote]
谢谢您的回复。
我是想在MFC的框架下播放一个视频,由于对windows编程了解甚少,所以才问了该问题。
jeremy_wong
2010-06-30
打赏
举报
回复
还有ffdshow,你都可以参考。
Qt+
FFMPEG
解码
视频
并显示
是一个Windows下使用
FFMPEG
解码
视频
并保存成图片文件的简单的例子
FFMPEG
的版本是2.5.2 关于代码的解释 请参考: http://blog.yundiantech.com/?log=blog&id=8 是一个Windows下使用
FFMPEG
解码
视频
并使用QPaint绘制到QWidget上
FFMPEG
的版本是2.5.2 必须要将
ffmpeg
/bin目录下的所有l文件拷贝到编译生成的exe所在的目录下,否则会无法运行。 音频文件路径大家要改一下。
利用
FFMPEG
进行
视频
解码
利用
FFMPEG
中的结构体
AV
Frame
保存解析
出
来的
视频
图像
帧
,并且将图像转换成固定的格式进行保存!
基于qt和
ffmpeg
视频
播放器开发实战
ffmpeg
是世界上应用广的开源
视频
处理框架,在各个平台(windows,linux,嵌入式、Android、IOS)被广泛应用,可以说是做
视频
相关项目技能 qt是目前跨平台项目界面开发的第一选择,本课程基于这两种框架在加上VC++,...
C++队列缓存
AV
packet.zip
FFmpeg
是一套可以用来记录、转换数字音频、
视频
,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音
视频
的完整解决方案。它包含了非常先进的音频/
视频
编
解码
库lib
av
codec,为了保证高可移植性和编
解码
质量,lib
av
codec
里
很多code都是从头开发的。
【Android
FFMPEG
开发】
FFMPEG
解码
AV
Packet 数据到
AV
Frame
(
AV
Packet->
解码
器 | 初始化
AV
Frame
|
解码
为
AV
Frame
数据 )
I .
FFMPEG
解码
AV
Packet 数据到
AV
Frame
前置操作 II .
FFMPEG
解码
AV
Packet 数据到
AV
Frame
流程 III .
FFMPEG
发送
AV
Packet 数据包给编
解码
器 (
AV
Packet->
解码
器 ) IV .
FFMPEG
AV
Packet 内存释放 V .
FFMPEG
初始化
AV
Frame
结构体 VI .
FFMPEG
解码
器
AV
Codec 接收并
解码
AV
Packet 数据到
AV
Frame
中 VII .
FFMPEG
解码
AV
P
多媒体/流媒体开发
2,542
社区成员
20,281
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章