前面介绍了Linux下编译ffmpeg的方法,考虑到大部分时候测试ffmpeg功能都是使用的windows系统(至少我是这样的),因此将战场重新转移到windows上。前面写了那么多的代码,但都只是简单的调用了ffmpeg的API,并不知道他内部是如何实现的。如果可以在调试的时候打个断点就可以进入ffmpeg代码调试看看实现该好友多好!梦想总是要有的,万一实现了呢!百度了一下发现可以做到,...
水了这么多篇,是时候开始干正事了。Linux基础知识已经掌握了,现在可以开始编译ffmpeg了:一、下载ffmpeg首先下载ffmpeg的源代码,ffmpeg所有版本源代码下载地址:http://ffmpeg.org/releases/截至本文编写时,ffmpeg最新版本是3.3,但我们还是一如既然的使用2.5.6.2.5.6下载地址: http://ffmpeg.org/releases/ff...
QDesktopWidget* desktopWidget =QApplication::desktop(); QRect deskRect =desktopWidget->availableGeometry(); //获取可用桌面大小 QRect screenRect =desktopWidget->screenGeometry(); //获取设备屏幕大小
原文地址:http://blog.yundiantech.com/?log=blog&id=13到这里,我们的视频播放器已经可以同步播放音视频了。现在 是时候给他加上一些控制的功能了。如播放、暂停、跳转等。一、暂停功能实现 我们是在一个单独的线程中循环读取视频,所以只需要在需要暂停的时候,让读取的操作等下来即可。做法如下:1.首先引入一
QT显示中文的方法:在main函数中加入以下内容,即可解决Qt中文乱码的问题。 LINUX系统加: QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
Qt全屏显示窗体 全屏: setWindowFlags(Qt::Window); showFullScreen(); //窗体全屏显示 恢复正常: showNormal();
前面使用dshow获取到的屏幕截图是一段rgb24的数据,需要将其转换成yuv420格式才能进行编码等操作。网上找了很多资料,发现能用的并不多,这里总结一下。这个是读取bmp文件然后转换成Yuv的,经过简单修改就可以将输入换成我们前面获得的rbg数据,运行后发现转换的效果很好,但是效率实在太低了,非常耗时。由于本人对图片的组成和原理方面不懂,想要优化这个似乎太难了,只能继续上网找别的算法。代码就几
寒冷的冬天躲在被窝里用电脑看电影的时候,相信大家都希望不想起身操作电脑,这时候能有个遥控器可以直接控制电脑该多好。下面就像大家介绍一个用手机控制电脑的方法:一、软件下载首先需要下载一款软件叫“KK遥控” ,这是一款手机控制电脑的软件,需要在手机和电脑上都安装才能使用。软件界面如下:-电脑版:手机版:二、电脑绑定 第一次使用此软件,需要进行一次电脑绑定,绑定完后以后就不再需要了,绑定操作也很简单:
Makefile 书写规则:总目标:依赖1依赖2...目标1:依赖<tab>命令目标2:依赖<tab>命令/* ######## makefile #######*/helloworld:hello.o main.o gcc -o helloworld hello.o main.ohello.o:hello.c gcc -c hello.cmain.
代码
不知道大家在写Linux程序的时候用的是什么工具。 我见过有人在windows下用UE编辑了然后拿到里面编译,感觉这样太麻烦了吧。 网上把 vi + gcc + gdb传的那么神,于是本人也亲自配置了体验一下,发现根本没那回事。用惯了windows下的IDE工具 在纯文本界面开发到还真是不习惯,没有语法高亮,没有代码补全,没有自动跳转,编译的时候只能在终端里面看到哪一行出错然
熟话说:没有什么比研究源代码本身更好的了。所以这里不啰说了,直接上代码了。【说明】采集音频用的是QAudioInput播放音频用SDL,不用QAudioOutput是因为QAudioOutput播放声音必须是IO他需要先打开,然后才能播放,打开的过程需要时间,所以不流畅。【bug】播放的时候依然会有一些杂音,暂时无法解决了,以后再解决。【2017-06-09更新】这里需要纠正一个事,上面提到QA
Qt定时器: QTimer *testTimer = new QTimer(this); //创建定时器 将定时器超时信号与槽(功能函数)联系起来: connect( testTimer, SIGNAL(timeout()), this, SLOT(testFunction()) ); testTimer->start(1000);//开始运行定时器,定时时间间隔为1
linux网络编程之TCP编程----初级TCP编程步骤一、TCP服务器:TCP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt(); *可选3、绑定IP地址、端口等信息到socket上,用函数bind();4、开启监听,用函数listen();5、接收客户端上来的连接,用函数accept();6、收发数据,用函数se
上一节讲解了YUV420P格式的内容。 我说过,我们不是为了做研究。 平白无故讲了YUV420P的理论知识,要是不做点什么总说不过去吧。 那么,我们就练练刀,写个播放YUV420P的程序吧,将前面保存的YUV420P图像用自己写的播放器播放出来。 这里我们还是一样使用Qt来显示图像。 之前做播放器的时候,是将YUV420P转换成RGB32,然后放到QImage里面显示出来。 由于Qt不支持直接
YUV420p数据是原始的图像数据,100张1920x1080的图像 总大小就达到了300M。太可怕了! 可见,这样直接写入文件是行不通的。因此我们需要把它编码成h264之后在写入文件。至于什么是h264,前面有介绍,这里就不介绍了。 废话不多说,直接进入正文吧。 编码h264还是一样使用ffmpeg,方法如下: 1.打开编码器 1 2
现在我们就将视频和音频合并,并让声音和画面同步。 加入音频的部分就不做讲解了,这里主要讲下声音和视频同步的步骤。 首先刚开始播放的时候通过av_gettime()获取系统主时钟,记录下来。 以后便不断调用av_gettime()获取系统时钟 减去之前记录下的差值,便得到了一个视频播放了多久的实际时间。 对于视频的同步我们这样做: 从视频读取出的数据中包含一个pts的信息(每一帧图像都会带有pts
.
============= 前面介绍了音频格式和视频格式,理论知识就不在多说了。 其他的理论上知识在以后用多少讲多少,毕竟我们不是为了做研究,而是实实在在的做项目,因此要把的重心放在实践上。 在正式开始之前呢,先讲下开发环境的选择。 首先操作系统的选择,总的来说大家都是用windows系统的,因此我们先从windows讲起,前期的项目也都是在windows下进行的,后期我们在讲解
前面讲解了如何用FFMPEG解码视频。 现在,我们就着手用FFMPEG+Qt写一个视频播放器吧: 由于现在我们需要显示图像了,因此现在开始需要使用Qt GUI工程了。 创建工程的时候记得选择Qt GUI应用。 引用FFMPEG请参考前面的文章,这里不再介绍。 做过图像界面开发的都知道,任何耗时的操作都不能放在主线程进行,一旦主线程阻塞了,那么体现出来的就是界面卡了。 而我们读取视频和解码视频是一
前面介绍了使用FFMPEG+Qt解码视频并显示。 现在我们就着手给它加上声音播放。 播放声音有很多种方式: 以windows系统为例,可以使用如下方法播放音频: 1.直接调用系统API的wavein、waveout等函数 2.使用directsound播放 这些方法都只能在windows上使用,且相当难用(至少我这么觉得),这个对于新手来说要把它们用好并稳定运行比较难。 想想我们使用FFMPE
由于人眼的惰性,因此只要图片的数量足够多,就会觉得是连续的动作。 所以,只需要将一张一张的图片保存下来,这样就可以构成一个视频了。 但是,由于目前网络和存储空间的限制,直接存储图片显然不可行。举个例子:在视频聊天中,假定从摄像头采集的图片每张大小200KB,每秒钟发送大概15帧图片,这样每秒钟需要的流量就需要3M(意味着需要24M的宽带),显然这个要求太高了。 于是,就可以考虑
1. 音频简介 前面我们说过视频有一个每秒钟采集多少张的概念,这就叫做视频的帧率。 和视频的帧率一样的道理,声音也有一个频率,叫做采样率。 人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
前面使用dshow获取到了屏幕的截图,并且转换成了yuv420格式。、现在需要能获取截图的部分区域。 本来打算在dshow获取截图的时候直接裁剪获得某个区域的rgb图像,但发现这样做,有时候成功不了。因此只能选择获取完整的屏幕截图,转换成yuv后再进行裁剪:YUV420裁剪代码如下:#include "yuvcut.h"#includeYuvCut::YuvCut(){}void YuvCut::
前面我们已经知道怎么使用FFMPEG了。 现在,开始着手使用FFMPEG吧: 首先来个简单的例子,使用FFMPEG打开视频文件,并解码保存成一张张的图片。 具体的步骤如下所示: 1.首先需要先初始化一下,使用如下函数: 1 av_register_all(); //初始化FFMPEG 调用了这个才能正常适用编码器和解码器 使用这个函数完成编码器和解码器的初始化,只有初
但是 现在有时希望获取的屏幕截图上不要有鼠标,研究了好久 发现ffmpeg似乎做不到。查了好久发现可以直接使用dshow来获取:代码如下:#ifndef GETSCREEN_H#define GETSCREEN_H#include #include #include #include //定义成一个可变参数列表的指针typedef unsigned char uint8_t;/*
地址:://blog.yundiantech./?log=blog&id=12前面我们已经为播放器加上了简单音视频同步功能。 播放mp4文件的时候似乎没啥问题,但是当播放rmvb文件的时候,问题就暴露出来了。 以电影天堂下载的电影文件为例:下载地址:CD1ftp://dygod2:
地址:://blog.yundiantech./?log=blog&id=29 到这里,我们已经掌握了windows下使用ffmpeg。谈不上精通,但至少已经算是入门了,现在,我们没有继续深入研究ffmpeg,因为深入研究的过程是很枯燥的(主要是我也只会这些了)。既然ffmpeg是跨平台的,那么就来感受一下吧,我们先从Linux开始,将之前实现的功能移植到Linux系统
前面我们已经开发了视频播放器和录屏软件,但目前为止,我们对原理性的东西其实还不是很了解。现在我们需要稍微了解一下理论知识,然后
AAC基本格式AAC音频格式有ADIF和ADTS:ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号