
音视频开发
文章平均质量分 53
音视频开发记录
师范大学生
登峰造极境
展开
-
vs配置SDL2.0
这里记录下在vs2017配置SDL2.0。1.下载源文件下载地址如下图所示,注意需要下载visual c++对应的版本。2.解压将文件夹存放在一个不包含中文路径的地方,解压,注意文件夹中只有include文件夹和lib文件夹是我们需要的。3.新建一个vc++项目注意我们使用的版本是x64的,因此在配置过程中所看到的一切“x86”的东西都要改成“x64”。4.右键单击左侧管理器的项目名称(“SDL2Test”),选择属性,进行配置。平台的类型要改成x64..原创 2022-05-02 20:10:45 · 1581 阅读 · 1 评论 -
ffmpeg获取视频流信息
在视频文件中,被压缩的视频和音频会被封装为一个文件,因此在解封装之后,我们还需要对视频流与音频流进行拆分,之后实现不同方式的处理。本程序实例用于获取具体视频文件的视频流与音频流的信息。#include<iostream>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入}using namespace std;int main(int argc, char *argv[]){原创 2022-04-28 09:33:49 · 5072 阅读 · 0 评论 -
ffmpeg音视频解码器
在获取到视频文件的视频流与音频流之后,需要进行解码操作以还原其原本格式进行播放。先上代码:#include<iostream>extern "C"{#include "libavcodec/avcodec.h"#include "include/libavformat/avformat.h"#include "include/libswscale/swscale.h"#include "include/libavdevice/avdevice.h"}using nam原创 2022-04-28 21:54:13 · 1511 阅读 · 0 评论 -
ffmpeg读取packet数据
在ffmpeg中,使用AVPacket结构体表示视频文件中的压缩数据,也就是还未进行解压缩的原始视频帧与音频帧。整体代码如下:#include<iostream>#define __STDC_CONSTANT_MACROSextern "C"{#include "libavcodec/avcodec.h"#include "include/libavformat/avformat.h"#include "include/libswscale/swscale.h"#incl原创 2022-05-02 16:23:07 · 1922 阅读 · 0 评论 -
ffmpeg + SDL2 实现播放器(一)
使用的ffmpeg版本为5.0.1,SDL的版本为2.022。c++环境为vs2017。先上最简易的整体代码,初步实现了SDL和ffmpeg的结合。#include<iostream>#include<string.h>#include<SDL.h>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入#include "include/libavformat/原创 2022-05-12 15:46:20 · 2843 阅读 · 1 评论 -
windows安装ffmpeg
ffmpeg非常强大,本文记录于2022.4.25,ffmpeg的发行版本为5.0.1。下载的链接为Download FFmpeg在上面的网页中选择Download,选择Windows builds from gyan.dev在左侧的release builds里面选择当前最新的发行版本,即ffmpeg-release-full.7z,通过浏览器下载。下载完毕之后进行解压,可以看到在bin文件夹下面有三个.exe文件。需要在环境变量中将该bin文件进行注...原创 2022-04-25 20:13:54 · 4122 阅读 · 1 评论 -
SDL2画面刷新
学会SDL的事件与渲染机制之后,增加画面刷新机制就可以成为一个播放器了。在上一篇文章中讲过,似乎循环执行SDL_RenderPresent(renderer)就可以令视频逐帧播放了,为什么还要引入刷新机制呢?这是因为在一个循环中,重复执行一个函数的效果通常不是周期性的,因为每次加载和处理的数据所消耗的时间是不固定的,因此单纯地在一个循环中使用SDL_RenderPresent(renderer)会令视频播放产生帧率跳动的情况。因此需要引入一个定期刷新机制,令视频的播放有一个固定的帧率。通常使用多原创 2022-05-11 14:34:11 · 1510 阅读 · 0 评论 -
ffmpeg+SDL2实现播放器(二)
在上一篇文章中,代码的画面刷新不是定期实现的,这就导致视频的播放速度与实际不符,因此我们需要对其进行修改,使用多线程实现画面刷新的控制。该工程使用的ffmpeg版本为5.01,SDL版本为2.0.22。#include<iostream>#include<string.h>#include<SDL.h>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入#in原创 2022-05-13 16:06:10 · 844 阅读 · 0 评论 -
ffmpeg视音频解码器启动
其实ffmpeg音视频的解码器调用流程在上一篇文章中已经讲述完成了,本文主要是将已有的程序进行了一定的封装处理,令其更符合工程规范。先上代码:#include<iostream>extern "C"{#include "libavcodec/avcodec.h"#include "include/libavformat/avformat.h"#include "include/libswscale/swscale.h"#include "include/libavdevi原创 2022-04-29 21:23:26 · 1700 阅读 · 0 评论 -
ffmpeg+SDL2实现播放器(三)
前面的文章中实现一个固定帧率的视频播放器,但是光有播放功能似乎没有那个味道。因此本次增加了暂停/继续功能,按键关闭播放器功能,以及帧率改变功能。PS:实现帧率改变的初衷是改变播放视频的速度,但是总感觉这样的实现方式并不好,因为当你加速播放的时候,一秒内极有可能处理相当多的视频帧,会对播放设备产生明显影响,因此暂时认为对视频的加减速播放应该有更优的方案。整体代码如下:#include<iostream>#include<string.h>#include<SDL原创 2022-05-20 10:08:57 · 437 阅读 · 0 评论 -
ffmpeg+SDL2实现音频播放
本文记录使用ffmpeg+SDL2进行视频文件内的音频播放,注意是播放视频文件内的音频,不是播放音频文件。本文使用的ffmpeg版本为5.0.1,SDL的版本为2.022。c++环境为vs2017。和之前的播放视频或音频明显的区别是,播放视频文件内的音频需要进行重采样操作,代码中会引入重采样结构体SwrContext。重采样结构体能够改变原先音频的采样率、声道数等参数,令各种音频能够按照我们设定的参数进行输出。这样做的原因是不同视频文件内的音频参数通常区别较大,如果分别处理工作量太大,不如将其统一成相同的格原创 2022-06-17 10:14:43 · 1143 阅读 · 0 评论 -
SDL2播放pcm音频
作为播放器,只会播放视频还是不行的,因此需要研究一下SDL如何播放音频。SDL播放音频的过程相对于播放视频更为简单,主要流程如下:初始化工作:1.初始化SDL2.根据设定参数打开音频设备循环播放:1.播放音频数据2.延时等待播放完成#include <stdio.h>#include <tchar.h>#include <iostream>extern "C"{#include "SDL.h"};using namespac原创 2022-05-21 09:58:12 · 840 阅读 · 1 评论 -
vs配置ffmpeg
继前文windows安装ffmpeg之后,我们不仅要考虑怎么在电脑上使用命令来操作ffmpeg,还需要考虑如何在程序编写中使用ffmpeg中的功能。1.先把需要的头文件、链接库等下载了这里需要注意,我们这次下载的版本是带有shared的那一项,这个版本不仅包含了能允许pc操作ffmpeg的文件,还包含了供程序使用的各种文件。从上图中可见,bin,include,lib是我们需要的文件夹。2.新建c++工程不多说,先新建一个全新的c++工程,这里用的开发工具是vs2017...原创 2022-04-25 22:08:33 · 3983 阅读 · 2 评论 -
SDL2播放yuv视频文件与事件(event)
1.整体代码先上代码:#include <stdio.h>#include <string.h>#include <SDL.h>//自定义消息类型#define REFRESH_EVENT (SDL_USEREVENT + 1) // 请求画面刷新事件#define QUIT_EVENT (SDL_USEREVENT + 2) // 退出事件//定义分辨率// YUV像素分辨率#define YUV_WIDTH原创 2022-05-10 15:57:13 · 626 阅读 · 0 评论 -
SDL2的渲染
使用SDL2播放视频时需要通过渲染操作令视频的每一帧在窗口的显示。SDL播放视频的流程如下图所示:初始化组件:SDL_Init(); //初始化SDLSDL_CreateWindow(); //创建播放器的窗口SDL_CreateRenderer(); //创建基于窗口的渲染器SDL_CreateTexture(); //创建基于渲染器与视频格式的纹理循环渲染:SDL_UpdateTexture(); //设置纹理的数据SDL_Rende原创 2022-05-10 19:14:16 · 866 阅读 · 0 评论 -
ffmpeg对视频流、音频流的抽象
从前面的文章中我们实现了对一个视频文件的拆封装,拆出来的结果通常是视频流与音频流,一般一个视频会有一个视频流与一个音频流(视具体情况而定)。随后我们实现了两种流的信息查询,了解了视频文件的各个流的参数类型查看。现在,我们需要以流为单位进行处理,但在这之前我们需要理解在ffmpeg中视频流与音频流是如何进行抽象和管理的。先上全部代码:#include<iostream>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目原创 2022-04-28 15:51:08 · 694 阅读 · 0 评论 -
ffmpeg打开视频文件
本文ffmpeg的版本为当前最新的5.01版本,与网络上常见的2,3版本在函数和变量的使用上有较大差异。首先往工程目录里放进去一个视频文件,这样方便在代码中进行路径书写(偷懒)。当然代码中的注释也会提示如何直接完整书写视频的路径。#include<iostream>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入}using namespace std;int main.原创 2022-04-27 22:14:22 · 1909 阅读 · 1 评论 -
使用ffmpeg指令转换出yuv视频文件
播放器播放的都是经过解码后的视频,也就是yuv格式的视频文件,因此在学习的过程中需要准备一下yuv格式的视频做实验素材,这里演示如何在电脑中使用ffmpeg指令将一个视频文件转换为.yuv格式。1.打开视频文件路径下的shell视频文件一般存放在电脑中任何位置里,因此需要将shell定位到该路径下才能使用命令行。在视频所在的文件夹里按住shift键右键单击空白处,选择“在此处打开powershell窗口”,这样shell就定位到当前位置了。2.使用ffmpeg指令以该文件下的ds原创 2022-05-02 21:10:56 · 6056 阅读 · 0 评论