随笔分类 -  SimplePlayer

Implemented with FFmpeg and SDL2
摘要:音频与视频在播放当中可能会由于种种原因(如:音视频并非在同一时间开始播放,或视频由于解码任务繁重导致输出图像延迟等)导致音频与视频的播放时间出现偏差,这种就是音视频的同步问题,本文会对音视频同步进行讨论。 有三种音视频同步方式: 常见的实现方式是把视频同步到音频时钟。主要原因是,对于延迟以及卡顿,人 阅读全文
posted @ 2018-11-24 00:58 TaigaComplex 阅读(990) 评论(0) 推荐(0) 编辑
摘要:在前面的文章中,我们分别实现了视频图像解码、播放,音频解码、播放,现在则需要把这些功能组合起来。总体上来说,整个程序的功能可以分为两条线路:视频以及音频,两条线之间除了后续的同步操作之外基本没有任何关联。而在线路当中,各个模块之间并没有太紧密的耦合,只要上游模块提供了原料,下游模块就可以执行处理。因 阅读全文
posted @ 2018-11-20 01:21 TaigaComplex 阅读(757) 评论(0) 推荐(0) 编辑
摘要:音频的同步并不需要我们在程序实现。在设置好声道、采样率、音频格式后,程序只需要保证能一直提供音频数据就行,其余工作基本都由声卡实现。 阅读全文
posted @ 2018-11-05 00:32 TaigaComplex 阅读(375) 评论(0) 推荐(0) 编辑
摘要:两种SDL音频输出方式 我们这里采用SDL来进行音频输出。SDL提供两种音频输出的方式: 如果在SDL_OpenAudio时不指定callback,那么可以调用SDL_QueueAudio主动地向音频输出设备输送音频。这种方式的实现中,SDL维护一个音频队列,并从该队列中提取音频数据输出到音频设备, 阅读全文
posted @ 2018-11-05 00:02 TaigaComplex 阅读(1019) 评论(0) 推荐(0) 编辑
摘要:提取音频,具体点来说就是提取音频帧。提取方法与从视频文件中提取图像的方法基本一样,这里仅列出其中的不同点: 1. 由于目的提取音频,因此在demux的时候需要指定的是提取audio stream 2. 在decode时,解码音频与解码视频分别采用的是不同的API 3. 由于本播放器的音频输出实现是基 阅读全文
posted @ 2018-11-03 17:52 TaigaComplex 阅读(861) 评论(0) 推荐(0) 编辑
摘要:Frame Rate 帧率代表的是每一秒所播放的视频图像数目。通常,视频都会有固定的帧率,具体点地说是每一帧的时间间隔都是一样的,这种情况简称为CFR(Constant Frame Rate);另外一种情况就是每一帧的时间间隔不一定相同,即可变帧率,简称为VFR(Variable Frame Rat 阅读全文
posted @ 2018-10-19 23:13 TaigaComplex 阅读(1929) 评论(0) 推荐(0) 编辑
摘要:我们这里采用SDL(本文所用版本为SDL2.0.5)来进行图像输出,SDL在进行图像渲染时一般采用的会是direct3D或者opengl,SDL对它们进行了封装,不过我们这里只讨论SDL的使用,并不会去涉及这些底层实现。尽管如此,我们还是有必要了解其中一些基本概念,这些概念能帮助我们很好地理解所使用 阅读全文
posted @ 2018-09-10 19:21 TaigaComplex 阅读(966) 评论(0) 推荐(0) 编辑
摘要:在开始之前,我们需要了解视频文件的格式。视频文件的格式众多,无法三言两语就能详细分析其结构,尽管如此,ffmpeg却很好地提取了各类视频文件的共同特性,并对其进行了抽象描述。 视频文件格式,统称为container。它包含一个描述视频信息的头部,以及内含实际的音视频编码数据的packets。当然,这 阅读全文
posted @ 2018-09-07 12:20 TaigaComplex 阅读(2033) 评论(0) 推荐(0) 编辑
摘要:简单的播放器需要实现一个最基本的功能:播放视频文件。 实现这个功能需要包含以下几个步骤: 本实现是通过ffmpeg来实现音视频的提取,通过sdl2来实现音视频的输出,版本如下: Github Repository 阅读全文
posted @ 2018-09-04 14:15 TaigaComplex 阅读(1814) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示