MultiMedia
文章平均质量分 84
SuperDali
写写博客,记记生活
展开
-
MediaPlayer源码分析
MediaPlayer前记,本文涉及java、c/c++、JNI、智能指针等知识,还是有一定门槛的。不过,如果你有一颗坚持不懈心,本文也非常适合阅读,除了java之外的知识,都有解释或者浅显易懂的外链,不是特别小白的程序员都能看懂。MediaPlayer示例代码public class MainActivity extends AppCompatActivity implement...原创 2018-08-25 22:38:49 · 4708 阅读 · 4 评论 -
SDL2:第四个程序(Mac):显示YUV数据
在上一个程序SDL2:第三个程序(Mac):显示任意图片我们利用sdl2_image库已经可以做到显示任意格式的图片了。可我这种最终要利用SDL2做视频工具的男人,怎么会满足于小小的图片呢。因为FFmpeg解码出来的视频帧数据是以YUV数据的格式展现,所以我必须先弄清楚YUV格式,在SDL2中是怎么显示的。为此,我专门用FFmpeg命令,将小王子的图片从jpg格式,转成了I420的YUV4:...原创 2019-05-10 21:04:15 · 778 阅读 · 2 评论 -
FFmpeg播放器(一):FFmpeg+SDL2播放视频数据
基本调用流程做了一个利用ffmpeg解码出yuv数据,通过SDL2显示数据的demo,记录一下。视频源使用的是网上源:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4也不知道是谁家的,先感谢一下吧。代码算是最基本的代码了,没有做过度的抽取封装,个人觉得这种代码更加易学。能够直观的看出FFmpeg和SDL2的接口调用顺序。其中FFmpeg...原创 2019-05-14 23:41:30 · 1675 阅读 · 2 评论 -
SDL2常用函数&结构分析:SDL_Renderer&SDL_CreateRenderer&SDL_RenderCopy&SDL_RenderPresent
SDL_RendererSDL_Renderer是一个结构体,用来表示SDL2中渲染器的状态。从代码的使用上来讲,你也可以把它视为渲染器本身。我们可以利用它产生纹理,也可以用来渲染视图。通常,SDL_Renderer实例由SDL_CreateRenderer函数创建。SDL_CreateRenderer函数原型:SDL_Renderer* SDL_CreateRenderer(SDL_Wi...原创 2019-05-09 23:30:31 · 4022 阅读 · 0 评论 -
Android Framework层播放器评分机制
本文涉及源码版本为:Oreo 8.0.0_r4/frameworks/av/media/libmedia/mediaplayer.cpp/frameworks/av/include/media/mediaplayer.h/frameworks/av/media/libmediaplayerservice/MediaPlayerFactory.cpp/frameworks/av/media...原创 2019-04-30 21:34:42 · 895 阅读 · 0 评论 -
SDL2:第三个程序(Mac):显示任意图片
在上一个程序SDL2:第二个程序(Mac):显示BMP位图中,我们利用SDL2的公共API,在SDL窗体上加载了一个位图(BMP)。要加载任意格式的图片,仅仅依靠默认API是不够的,需要引入另外的图片库:sdl2_image安装sdl2_image执行命令:brew install sdl2_image执行结果:==> Installing dependencies for s...原创 2019-05-04 00:54:42 · 932 阅读 · 0 评论 -
SDL2:第二个程序(Mac):显示BMP位图
继上一个SDL2程序(SDL2:第一个程序(Mac)),我们使用SDL2打开了一个黑色的窗口。世界应该是彩色的,怎么能让黑色霸占呢,是时候让阳光驱逐黑暗了,今天,我要用SDL2显示一张图片。为此,我花重金请了位模特,拍了张照片。我待会儿就要让小王子进入SDL的世界。代码还是第一个程序的代码,只不过在上面稍作修改。首先是CMakeLists.txt文件cmake_minimum_req...原创 2019-05-03 18:44:00 · 758 阅读 · 2 评论 -
SDL2常用函数&结构分析:SDL_BlitSurface&SDL_UpdateWindowSurface
SDL_BlitSurface函数功能:将一个surface的数据快速复制到目标surface中。函数原型:int SDL_BlitSurface(SDL_Surface* src, const SDL_Rect* srcrect, SDL_Surface* dst, ...原创 2019-05-03 17:47:08 · 2407 阅读 · 0 评论 -
SDL2常用函数&结构分析:SDL_Surface&SDL_GetWindowSurface&SDL_LoadBMP
SDL_SurfaceSDL_Surface的官方定义为:A collection of pixels used in software blitting.(软件blitting中使用的像素集合)这么一看,还真不好理解,blitting到底是个啥意思,起初我以为是文化差异造成的。Google了一下,发现有搜索这个解释的国外大兄弟还有很多,在Stack overflow中找到一个比较靠谱易懂的说...原创 2019-05-03 17:23:29 · 5484 阅读 · 1 评论 -
SDL2常用函数&结构分析:SDL_Event&SDL_PollEvent
SDL_EventSDL_Event是个联合体,是SDL中所有事件处理的核心。 SDL_Event是SDL中使用的所有事件结构的并集。 只要知道了那个事件类型对应SDL_Event结构的那个成员,使用它是一个简单的事情。下表罗列了所有SDL_Event的所有成员和对应类型。Uint32typeevent type, shared with all eventsSDL_C...原创 2019-05-03 15:16:19 · 5228 阅读 · 0 评论 -
SDL2常用函数&结构分析:SDL_Window&SDL_CreateWindow
SDL2常用函数&结构分析:SDL_Window&SDL_CreateWindowSDL_WindowSDL_Window:结构体,描述了一个窗体对象,表示的是会呈现在设备上一个窗体,所有图像的载体。一般通过SDL_CreateWindow函数创建,和SDL_DestroyWindow销毁。SDL_CreateWindow函数原型:SDL_Window* SDL_Crea...原创 2019-05-03 15:13:08 · 4837 阅读 · 0 评论 -
SDL2常用函数&结构分析:SDL_Init
SDL_Init函数原型如下:int SDL_Init(Uint32 flags)使用此函数初始化SDL库,必须在使用大多数其他SDL函数之前调用它。参数:flags 表示需要初始化那些子系统。常见的子系统和对应的flag如下:flags子系统SDL_INIT_TIMER计时器子系统SDL_INIT_AUDIO音频子系统SDL_INIT_VIDEO...原创 2019-05-03 15:09:51 · 1345 阅读 · 1 评论 -
FFmpeg:AVFrame结构体分析
最近发现了ffmpeg有个网页版的文档,分享给大家:ffmpeg文档,查询起来看是挺方便的。现在才发现,是不是有点太晚了?之前都是直接看源码上的注释,反过来想想,那些注释写的也都听清晰易懂的哈(自我安慰)。AVFrameAVFrame结构体描述了解码后的(原始)音频或视频数据。AVFrame通常被分配一次,然后多次重复使用以持有不同的数据(例如,单个AVFrame持有从解码器接收的帧)。 ...原创 2019-05-02 11:48:37 · 5836 阅读 · 0 评论 -
FFmpeg:AVIOContext结构体分析
分享一个FFmpeg的文档地址,如果本文有什么没讲清楚的,建议直接去查找:传送门AVIOContext这个结构体,是FFmpeg中有关io操作的顶层结构体,是avio的核心。FFmpeg支持打开本地文件路径和流媒体协议的URL。虽然AVIOContext时avio操作的核心,但AVIOContext中的所有函数指针都不应该直接调用,它们只应在实现自定义I / O时由客户端应用程序设置。 通常...原创 2019-05-02 11:51:53 · 2439 阅读 · 0 评论 -
FFmpeg:AVCodecContext结构体解析
文档:传送门AVCodecContextAVCodecContext也是FFmpeg使用过程中比较重要的结构体,保存了编解码器上下文相关信息。不管是编码,还是解码都会用到,但在两种不同应用场景中,结构体中部分字段作用和表现并不一致,这一点需要特别注意。AVFormatContext包含了一个媒体流的解码器的上下文信息,比较重要的有:AVMediaType:解码器类型,表示这个解码器是用来...原创 2019-05-02 11:50:38 · 3643 阅读 · 1 评论 -
FFmpeg:AVInputFormat结构体解析
AVInputFormat文档:传送门AVInputFormat是解复用器(解封装)作用时读取媒体文件并将其拆分为数据块(数据包)。每个数据包,包含一个或者多个编码帧比较重要的字段有:long_name:格式的长名称(相对于短名称而言,更易于阅读)。mime_type:mime类型,它用于在探测时检查匹配的mime类型。next:用于链接下一个AVInputFormat。(*rea...原创 2019-05-02 11:46:59 · 1479 阅读 · 0 评论 -
FFmpeg:AVPacket结构体分析
AVPacket文档地址:传送门在AVPacket结构体的说明部分:有这么一段描述,足够说明它的作用和重要性。该结构存储压缩数据。 它通常由解复用器导出,然后作为输入传递给解码器,或作为编码器的输出接收,然后传递给复用器。对于视频而言,它通常应包含一个压缩帧。 对于音频,它可能包含几个压缩帧。 允许编码器输出空包,没有压缩数据,只包含不重要的附加信息数据。例如在编码结束时更新一些流参数。...原创 2019-05-02 11:43:50 · 1316 阅读 · 0 评论 -
Android媒体底层通信框架Native Handler(三):NuPlayer
Native Handler实例分析(NuPlayer)该系列文章,会分为三个部分:介绍AHandler、ALooper源码:Android媒体底层通信框架Native Handler(二):AMessage介绍AMessage源码:AMessage值得一说的地方太多了,就和其它两个类分开了。Android媒体底层通信框架Native Handler(二):AMessage以Nuplay...原创 2019-04-21 17:45:47 · 1262 阅读 · 2 评论 -
PCM数据格式介绍
PCM原始音频数据格式介绍文章目录PCM原始音频数据格式介绍什么是PCMSampling(采样)采样率(Sample rate)Quantization(量化)Encoding(编码)PCM数据常用量化指标PCM数据流音量控制采样率调整什么是PCMPCM全称Pulse-Code Modulation,翻译一下是脉冲调制编码。其实大可以不用关心英文释义,之所以这么命令是因为一些历史原因。在...原创 2019-05-30 00:58:41 · 25387 阅读 · 14 评论