【音视频连载-007】基础学习篇-SDL 播放 PCM 音频文件(上)

在前面的文章中已经能够利用 SDL 去播放 YUV 视频文件了,接下来要通过 SDL 去播放 PCM 音频文件。

SDL 播放音频文件有两种方法,可以理解成 推(push)拉(pull)两种模式。

就是我们主动向设备缓冲区填充 Buffer ,而 就是由设备拉取 Buffer 填充到缓冲区。

在一些开发模型中,如果数据传递能够抽象成的形式,那么肯定就会有两种模式。

本篇文章主要是讲解 SDL 以推的形式播放音频文件。

[Read More]

【音视频连载-011】第二季 FFmpeg 一层一层获取文件信息

本篇文章主要是讲解如何通过 FFmpeg 代码来获取文件信息。

首先准备一个文件,用命令行来查看它的基本信息。

文件地址如下:

https://github.com/glumes/av-beginner/blob/master/resource/video/video-avi-320x320.avi

这个文件很有意思,它的内容是一个时钟,每隔一秒,秒针都会跳动,同时还会发出滴答的声音,很方便后续做音视频同步处理。

[Read More]

【音视频连载-003】基础学习篇-SDL 消息循环和事件响应

在前面的文章中已经创建了一个 SDL 窗口并且显示指定的颜色。

为了让窗口显示出来,在程序中写了一个死循环,这几行代码就是 SDL 消息循环和事件响应的核心缩影了。

    SDL_Event windowEvent;
    while (true){
        if (SDL_PollEvent(&windowEvent)){
            if (SDL_QUIT == windowEvent.type){
                break;
            }
        }
    }
[Read More]

【音视频连载-001】基础学习篇- SDL 介绍以及工程配置

这是音视频基础学习系列的第一篇文章,主要讲解 SDL 是什么以及为什么要用到它,看似和音视频没啥卵关系,其实必不可少。

SDL 简介

SDL 是 “Simple DirectMedia Layer” 的缩写,它是一个跨平台的多媒体库,可以在 Mac、Windows、Linux 以及更多的系统上运行。

SDL 提供了统一的针对音频、视频、键盘、鼠标、控制杆以及 3D 硬件的低级别访问接口,我们利用这些接口就能在不同系统上播放出音频、视频内容,而无需懂得系统特定的音视频接口。

这种跨平台特性和 OpenGL 是一样的,差别在与 OpenGL 是真·跨平台,它是 Khronos Group 组织开发维护的一个接口规范,具体的实现是由驱动厂商完成。而 SDL 是把要兼容平台的相关接口都给封装好了,然后才对外提供统一的接口。

由此可见,高下立判。一个跨平台是写了接口就行,不管实现;另一个是写好了实现,才能跨平台(貌似跑题了)。

由于 SDL 的跨平台特性,在后续学习 FFmpeg 时就可以利用 SDL 进行音视频的播放操作,而不用像在 Android 平台上搞 FFmpeg 还得编译 so、写 JNI 、写界面那么麻烦,另外 ffplay 源码里面也是用的 SDL 进行播放的,可以从中进行借鉴。

[Read More]

FFmpeg 3.0 版本视频解码浅析

MPEG封装格式到PCM数据格式

有了上一篇文章基础,这里就只关注 FFmpeg 如何解析的具体实践了。

在开始工程之前,第一步要做的就是编译 FFmpeg 源码,生成 Android 平台上使用的 so 库。

在生成完了之后,导入 Android 工程项目中,并且配置 CMake 文件,添加对应的库,就可以开始开发了。

[Read More]