ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]ffplay播放器移植VC的工程:ffplayforMFC本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayforMFC。本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面。它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。此外还包含一些控制功能:播放,暂停/继

大家好,又见面了,我是你们的朋友全栈君。

本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayfor MFC。本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面。它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。此外还包含一些控制功能:播放,暂停/继续,前进,后退,停止,逐帧播放,全屏等;以及一些简单的视频码流分析功能:视频解码分析和音频解码分析。通过本程序可以学习视频播放器原理,以及SDL和Windows消息机制。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

平台: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。中间是视频的参数列表。下方是视频的控制按钮。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

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。

画面大小:画面的分辨率。举例:1920×1080,720×576。

解码分析:以列表的形式显示每个视频帧的详细信息。

音频参数

采样率:每秒钟采样点个数。举例:44.1kHz,48kHz。

编码方式:音频采用的压缩编码标准。举例:AAC,MP3,WMA。

声道数:声道数量。

解码分析:以列表的形式显示每个音频帧的详细信息。

 

1.3控制按钮

 控制按钮包含了:开始,后退,暂停/继续,前进,停止,逐帧播放,全屏。

此外,这一排控制按钮的上方,包含了视频播放的进度条。可以通过拖动进度条控制视频的播放。

二. 视频播放窗口

视频播放采用SDL显示。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

三. 视频解码分析窗口

视频解码分析窗口列表显示了每一个视频帧的一些信息:序号,帧类型,关键帧,码流序号,PTS。其中不同的帧类型使用不同的背景色标识出来:I帧使用红色,P帧使用蓝色,B帧使用绿色。如图所示。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

四. 音频解码分析窗口

音频解码分析窗口列表显示了每个音频帧的一些信息:序号,大小,PTS等。如图所示。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

五. 系统支持信息窗口

系统支持信息窗口列表显示了系统的支持信息。包括系统支持的:协议,封装格式,视频解码器,音频解码器,以及其他解码器(字幕解码器)。例如协议列表如图所示,从中可以看出本程序支持的协议类型包含http,file,mms,rtp等等。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

例如从封装格式列表中,可以看出系统支持flv等封装格式。每个列表包含了序号,简称,全称,扩展名,私有数据大小等信息。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

六. 菜单

程序上端的菜单中包含了更丰富的选项。一共分成6部分的功能:文件,播放控制,播放窗口,视图,语言,帮助。下面分别介绍。

文件:文件的打开。

播放控制:视频播放过程中的控制功能。包含:播放,暂停/继续,停止,逐帧播放,全屏。此外包含了多种快进快退操作:快进10秒,1分,10分;快退10秒,1分,10分。

 ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

播放窗口:与播放窗口有关的各种选项。可以设置播放窗口显示的内容,以及窗口的大小,纵横比。播放窗口默认是显示视频画面。此外还可以图形化的显示音频的信息,包括音频的波形图,以及音频的RDFT变换图。

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

音频波形图显示效果如图所示:

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

音频的RDFT变换图显示效果如图所示:

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

视图:包含程序中的几个窗口。包含视频解码分析窗口,音频解码分析窗口,系统支持信息窗口。

语言:包含程序支持的几种语言。

帮助:包含程序的支持信息。

 

七. 英文界面

系统的英文界面如图所示。以后有机会可以增加其他语言。

主界面

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

视频解码分析窗口

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

音频解码分析窗口

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

系统支持信息窗口

ffplay播放器移植VC的工程:ffplay for MFC[通俗易懂]

项目主页

SourceForge:https://sourceforge.net/projects/ffplayformfc/

Github:https://github.com/leixiaohua1020/ffplaymfc

开源中国:http://git.oschina.net/leixiaohua1020/ffplay-for-MFC
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149453.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 前端性能优化的七种方法是_web前端性能

    前端性能优化的七种方法是_web前端性能前端性能优化主要有七种方法,包括减少请求数量、减少资源大小、优化网络连接、优化资源加载、减少重绘回流、使用性能更好的API和构建优化1、减少请求数量1.1图片处理1.1.1雪碧图雪碧图是根据csssprite音译过来的,就是将很多小图标放在一张图片上就称之为雪碧图,可以减少网站http请求数量,但是当整合图片比较大的时候,一次加载比较慢,随着字体图片、svg图片的流行该技术慢慢退出了舞台1.1.2Base64将图片的内容以Base64格式内嵌到HTML中,可以减少http请求数量,但是

    2022年10月30日
  • myeclipse8.5注册码怎么用_java生成不重复验证码

    myeclipse8.5注册码怎么用_java生成不重复验证码注册码:用户名:myeclipse5.5注册码:zLR7ZL-655444-60536056302480798注册机代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintStream;

  • 用 Java3D 写游戏

    用 Java3D 写游戏2009-03-2413:26:51|  分类: Java3D先介绍下相关的技术吧Java3D 作为SUN公司较早推出的一项3D技术,是一种高度封装的API,构建在OpenGL和Direct3D之上,可以说是最有名的Java的3D技术。由于种种原因(A

  • 一个集合是否包含另一个集合「建议收藏」

    一个集合是否包含另一个集合「建议收藏」一个集合是否包含另一个集合

  • Proxy实现mysql读写分离

    1.mysql实现读写分离的方式mysql实现读写分离的方式有以下几种:程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助。amoeba,直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案,自己分配账户,和后端数据库权限管理独立,权限处理不够灵活。mysql-proxy,直接实现读写分离和负载均衡,不用…

  • MFC进度条编程「建议收藏」

    MFC进度条编程「建议收藏」1.进度条的主要功能进度条控制(ProgressControl)主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充。进度条控制在MFC类库中的封装类为CProgressCtrl,通常仅作为输出类控制,所以其操作主要是设置进度条的范围和当前位置,并不断地更新当前位置。进度条的范

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号