FFmpeg 入门(3):播放音频】的更多相关文章

本文转自:FFmpeg 入门(6):音频同步 | www.samirchen.com 音频同步 上一节我们做了将视频同步到音频时钟,这一节我们反过来,将音频同步到视频.首先,我们要实现一个视频时钟来跟踪视频线程播放了多久,并将音频同步过来.后面我们会看看如何将音频和视频都同步到外部时钟. 实现视频时钟 与音频时钟类似,我们现在要实现一个视频时钟:即一个内部的值来记录视频已经播放的时间.首先,你可能会认为就是简单地根据被显示的最后一帧的 PTS 值来更新一下时间就可以了.但是,不要忘了当我们以毫秒…
本文转自:FFmpeg 入门(3):播放音频 | www.samirchen.com 音频 SDL 提供了播放音频的方法.SDL_OpenAudio 函数用来让设备播放音频,它需要我们传入一个包含了所有我们输出需要的音频信息的 SDL_AudioSpec 结构体数据. 在展示接下来的代码之前,我们先说说 PC 上是如何处理音频的.数字音频包含了一长串「音频采样(sample)」,每一个采样代表着一个音频波形的值.声音是在一定的「音频采样率(sample rate)」下被录制下来的,音频采样率即每…
参考dranger tutorial,本文将介绍如何使用FFmpeg解码音频数据,并使用SDL将解码后的数据输出. 本文主要包含以下几方面的内容: 关于播放音频的需要的一些基础知识介绍 使用SDL2播放音频 数据队列 音频格式的转换 dranger tutorial确实入门FFmpeg比较好的教程,虽然作者在2015年的时候根据新版本的FFmpeg更新了, 但是其中还是有不少API过时了.特别是,教程中使用的是SDL1.0,和现在的SDL2的API也有很大的不同,并且不能兼容. 1. 关于音频的…
一个偶然的机缘,好像要做直播相关的项目 为了筹备,前期做一些只是储备,于是开始学习ffmpeg 这是学习的第一课 做一个简单的播放器,播放视频画面帧 思路是,将视频文件解码,得到帧,然后使用定时器,1秒显示24帧 1.创建win32工程,添加菜单项 “打开” 为了避免闪烁,MyRegisterClass中设置hbrBackground为null 2.在main函数中初始化ffmpeg库:av_register_all(); 3.响应菜单打开 void LoadVideoPlay(HWND hWn…
1. 前言 目前为止,学习了并记录了ffmpeg+SDL2显示视频以及事件(event)的内容. 这篇中记录ffmpeg+SDL2播放音频,没加入事件处理. 接下来加入事件处理并继续学习音视频同步,再接下来就添加暂停之类的或者添个界面. 2. 流程图 3. 示例 示例代码的主要思想是:(和音频播放器V1.0思想一样,实现不同.不同在于这个程序用一个队列存储主线程读到的AVPacket) 主线程只负责读AVPacket存到队列.->av_read_frame() 其他所有的解码,输出工作都由cal…
播放音频,设置好SDL_AudioSpec播放参数,然后由SDL回调函数进行解码和数据的拷贝,解码播放音频无需设置延迟,因为声卡播放音频是阻塞的 int audio_decode_frame(AVCodecContext *aCodecCtx, uint8_t *audio_buf, int buf_size) { static AVPacket pkt; static uint8_t *audio_pkt_data = NULL; static int audio_pkt_size = 0;…
本文转自:FFmpeg 入门(7):Seeking | www.samirchen.com 处理 seek 命令 我们将为播放器添加 seek 的能力.这个过程中,我们会看到 av_seek_frame 用起来有多方便. 我们添加的功能是通过上下左右键能够做快进或快退,其中左右键快进或快退的幅度较小,为 10s,上下键快进或快退的幅度较大,为 60s.所以我们需要在我们的事件处理循环中添加处理按键的逻辑.但是当我们遇到按键事件时,我们不能直接调用 av_seek_frame,我们需要在 deco…
本文转自:FFmpeg 入门(5):视频同步 | www.samirchen.com 视频如何同步 在之前的教程中,我们已经可以开始播放视频了,也已经可以开始播放音频了,但是视频和音频的播放还未同步,我们要怎么办呢? PTS 和 DTS 好在音频和视频都有信息来控制播放时的速度和时机.音频流有一个采样率(sample rate),视频流有一个帧率(frame per second).但是,如果我们只是简单地通过数帧和乘上帧率来同步视频,那么它可能会和音频不同步.实际上我们将使用 PTS 和 DT…
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 https://www.qcloud.com/community 视频播放器原理其实大抵相同,都是对音视频帧序列的控制.只是一些播放器在音视频同步上可能做了更为复杂的帧预测技术,来保证音频和视频有更好的同步性. ffplay是FFMpeg自带的播放器,使用了 ffmpeg解码库和用于视频渲染显示的sdl…
本文转自:FFmpeg 入门(4):线程分治 | www.samirchen.com 概览 上一节教程中,我们使用 SDL 的音频相关的函数来支持音频播放.SDL 起了一个线程来在需要音频数据的时候去调用我们定义的回调方法.现在我们要做的是用线程的方法去改造视频显示这块的逻辑.这样一来会使得代码的机构更模块化,这样改动起来会更简单,尤其是当我们想添加音视频同步逻辑时. 我们从哪开始呢?首先,我们发现我们的 main 函数做的事情太多了:运行 event loop.读取数据包.进行视频解码等等,所…