ffplay播放器移植VC的工程:ffplay for MFC
本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayfor MFC。本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面。它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。此外还包含一些控制功能:播放,暂停/继续,前进,后退,停止,逐帧播放,全屏等;以及一些简单的视频码流分析功能:视频解码分析和音频解码分析。通过本程序可以学习视频播放器原理,以及SDL和Windows消息机制。
平台:VC2010
类库:FFmpeg,MFC
项目主页
SourceForge:https://sourceforge.net/projects/ffplayformfc/
Github:https://github.com/leixiaohua1020/ffplaymfc
开源中国:http://git.oschina.net/leixiaohua1020/ffplay-for-MFC
CSDN项目下载
ffplay for MFC 1.0.0(stable)——本版本采用FFmpeg的2012年的类库,稳定
http://download.csdn.net/detail/leixiaohua1020/7452437
ffplay for MFC 1.0.1——本版本采用FFmpeg的2014年5月的类库,支持HEVC和VP9,Debug下稳定,Release下目前还有问题。
http://download.csdn.net/detail/leixiaohua1020/7452493
注:Release下的问题已经得到网友建议并且解决。解决方法如下:
VC工程属性里,linker->Optimization->References 选项,改成No(/OPT:NOREF)。
注:以上两个项目由于失误,少了一个SDL.dll文件,去SDL官网
http://www.libsdl.org/download-1.2.php
下载一个Runtime Libraries即可
补充:
该项目原代码简介可以参考:ffplay for mfc 代码备忘
更新记录==============================
1.1版(2014.7.10)
* 更换了部分界面
* 原工程支持Unicode编码
* 修复了Release下的Bug
* 添加了两个宏定义"INT64_MIN INT64_MAX",在没有安装 Win7SDK的情况下,可能会出现找不到定义的情况。
CSDN上又上传了一份:http://download.csdn.net/detail/leixiaohua1020/7764509
PUDN上也传了一份:http://www.pudn.com/downloads644/sourcecode/multimedia/detail2605167.html
一. 主界面
程序的主界面如图所示。最上方是输入的URL。中间是视频的参数列表。下方是视频的控制按钮。
1.1输入URL
输入URL框用于输入视频的URL。视频源可以是本地视频或者是网络流。单击输入框右侧的“文件”按钮可以方便地选择本地的文件并获取他们的URL(在这里是路径信息)。此外,也可以将本地视频文件直接拖拽到对话框中,也可以获取到该视频的URL。
1.2参数列表
封装格式参数
输入类型:输入视音频采用的传输协议。举例:RTP,FILE(文件),HTTP,RTMP。
封装格式:视音频采用的封装格式。举例:AVI,FLV,MKV,RMVB。
比特率:视音频的码率。举例1Mbps。
时长:视音频的时间长度。
MetaData:视音频元数据信息。
视频参数
输出像素格式:解码后像素数据格式。举例:YUV420P,RGB24,UYVY。
编码方式:视频采用的压缩编码标准。举例:H.264,MPEG2。
帧率:每秒钟视频画面数。举例:25fps。
画面大小:画面的分辨率。举例:1920x1080,720x576。
解码分析:以列表的形式显示每个视频帧的详细信息。
音频参数
采样率:每秒钟采样点个数。举例:44.1kHz,48kHz。
编码方式:音频采用的压缩编码标准。举例:AAC,MP3,WMA。
声道数:声道数量。
解码分析:以列表的形式显示每个音频帧的详细信息。
1.3控制按钮
控制按钮包含了:开始,后退,暂停/继续,前进,停止,逐帧播放,全屏。
此外,这一排控制按钮的上方,包含了视频播放的进度条。可以通过拖动进度条控制视频的播放。
二. 视频播放窗口
视频播放采用SDL显示。
三. 视频解码分析窗口
视频解码分析窗口列表显示了每一个视频帧的一些信息:序号,帧类型,关键帧,码流序号,PTS。其中不同的帧类型使用不同的背景色标识出来:I帧使用红色,P帧使用蓝色,B帧使用绿色。如图所示。
四. 音频解码分析窗口
音频解码分析窗口列表显示了每个音频帧的一些信息:序号,大小,PTS等。如图所示。
五. 系统支持信息窗口
系统支持信息窗口列表显示了系统的支持信息。包括系统支持的:协议,封装格式,视频解码器,音频解码器,以及其他解码器(字幕解码器)。例如协议列表如图所示,从中可以看出本程序支持的协议类型包含http,file,mms,rtp等等。
例如从封装格式列表中,可以看出系统支持flv等封装格式。每个列表包含了序号,简称,全称,扩展名,私有数据大小等信息。
六. 菜单
程序上端的菜单中包含了更丰富的选项。一共分成6部分的功能:文件,播放控制,播放窗口,视图,语言,帮助。下面分别介绍。
文件:文件的打开。
播放控制:视频播放过程中的控制功能。包含:播放,暂停/继续,停止,逐帧播放,全屏。此外包含了多种快进快退操作:快进10秒,1分,10分;快退10秒,1分,10分。
播放窗口:与播放窗口有关的各种选项。可以设置播放窗口显示的内容,以及窗口的大小,纵横比。播放窗口默认是显示视频画面。此外还可以图形化的显示音频的信息,包括音频的波形图,以及音频的RDFT变换图。
音频波形图显示效果如图所示:
音频的RDFT变换图显示效果如图所示:
视图:包含程序中的几个窗口。包含视频解码分析窗口,音频解码分析窗口,系统支持信息窗口。
语言:包含程序支持的几种语言。
帮助:包含程序的支持信息。
七. 英文界面
系统的英文界面如图所示。以后有机会可以增加其他语言。
主界面
视频解码分析窗口
音频解码分析窗口
系统支持信息窗口
SourceForge:https://sourceforge.net/projects/ffplayformfc/
Github:https://github.com/leixiaohua1020/ffplaymfc
开源中国:http://git.oschina.net/leixiaohua1020/ffplay-for-MFC
ffplay播放器移植VC的工程:ffplay for MFC的更多相关文章
- ffplay播放器移植VC的project:ffplay for MFC
本文介绍一个自己做的FFPLAY移植到VC下的开源project:ffplayfor MFC.本project将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.而且使用 ...
- ffmpeg转码器移植VC的工程:ffmpeg for MFC
本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC.本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下.并且使用MFC做了一套简单的 ...
- 零基础读懂视频播放器控制原理——ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- 视频播放器控制原理:ffmpeg之ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- [Linux][Madplay播放器移植mini2440(ARM9)]
Madplay移植到mini2440全过程详解 madplay交叉编译 交叉编译器:arm-linux-gcc 3.4.1PC环境:RedHat-6 注意:最好在root权限下执行以下移植,否则在ma ...
- 在VC++空工程中使用MFC类,采用Unicode字符集后,运行工程程序报错的解决方案
创建一个VC++空工程,将Project Properties->General->Use of MFC改为Use MFC in a Shared DLL 新建一个源文件,内容如下 #in ...
- ffmpeg转码器移植VC的project:ffmpeg for MFC
本文介绍一个自己做的FFMPEG移植到VC下的开源project:ffmpeg for MFC.本project将ffmpegproject中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下 ...
- 仿迅雷播放器教程 -- 十年经验大牛对MFC的认识 (7)
由于上一个教程做界面用的是MFC,所以这里不得不说一下MFC的历史,请看正文: 原文链接:http://blog.csdn.net/sunhui/article/details/319551 作者 ...
- 把类完善了一下,播放器也完善了一下,纯MFC与WinMM的产物
随机推荐
- 如何在 vmware esxi 中开放 VNC功能及端口实现远程管理 完整篇
VMWare esxi中开放 VNC功能及端口实现远程管理 完整篇 在多个论坛上看了相关文章,总的写得不完整.现将各方资源整编写完整版.详文如下! (图片来自51CTO) 步骤1. 修改ESXi主机的 ...
- Oracle的dual
1.dual 确实是一张表.是一张只有一个字段,一行记录的表. 2.习惯上,我们称之为'伪表'.因为他不存储主题数据.3.他的存在,是为了操作上的方便.因为select 都是要有特定对象的.但如果我们 ...
- JButton
JButton和Button区别: Button是在java.awt.*中的,而JButton是在javax.swing.*中,swing是awt的一个扩展,由纯java便携,它有一个与平台无关的实现 ...
- 轻松理解AOP问题
先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,Spring是一个库,一个Jav ...
- hasattr(),getattr(),setattr()的使用
# 首先你有一个command.py文件,内容如下,这里我们假若它后面还有100个方法 class MyObject(object): def __init__(self): self.x = def ...
- leetcode刷题笔记342 4的幂
题目描述: 给定一个整数 (32位有符整数型),请写出一个函数来检验它是否是4的幂. 示例:当 num = 16 时 ,返回 true . 当 num = 5时,返回 false. 问题进阶:你能不使 ...
- ACM Self Number
In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. Fo ...
- 高仿腾讯QQ最终版
之前写过一篇关于高仿腾讯QQ的博客,不知道的看这:http://blog.csdn.net/htq__/article/details/51840273 ,主要是从界面上高仿了腾讯QQ,在UI上基本上 ...
- 每CPU变量
最好的同步技术是把设计不需要同步的临界资源放在首位,这是一种思维方法,因为每一种显式的同步原语都有不容忽视的性能开销.最简单也是最重要的同步技术包括把内核变量或数据结构声明为每CPU变量(per-cp ...
- Spring基础配置
从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...