摘要: 一、FFmpeg 学习 1. 官方API文档 FFmpeg Documentation:http://www.ffmpeg.org/doxygen/trunk/index.html 2. 优秀开源项目 a). FFmpeg_Tutorial : https://github.com/yinwenji阅读全文
posted @ 2019-02-21 17:02 灰色飘零 阅读(97) 评论(0) 编辑
摘要: Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。 初级入门篇: Android 音视频开发(一) : 通过三种方式绘制图片 Android 音视频开发(二):使用 AudioRecord 采集音频P阅读全文
posted @ 2017-08-30 13:02 灰色飘零 阅读(9068) 评论(1) 编辑
摘要: 下面这些资源对Android开发来说是很有帮助的! 1. 在线代码运行工具 地址:https://tool.lu/coderunner/ 说明:此工具站能在线运行C、C++、Java,基本能满足相关基础知识学习时的运行的实验代码的需求。 2. 在线编程书籍/教程集合 Android 官方网站 说明:阅读全文
posted @ 2017-03-17 17:42 灰色飘零 阅读(408) 评论(0) 编辑
摘要: 在使用Markdown编写博客或文件的时候,经常会需要插入图片。如果使用Markdown语法,我们会发现调整图片的大小会是个问题。 所以推荐使用另一种办法插入图片,使用HTML语法,示例如下:阅读全文
posted @ 2019-03-16 14:50 灰色飘零 阅读(7) 评论(0) 编辑
摘要: 本文中实现的一个小功能是把一个YUV原始视频数据(时间序列图像)经过h264编码为视频码流,然后在使用mp4封装格式封装。 编码&封装的流程图如下: 使用ffmpeg编码流程: 1、首先使用av_register_all()函数注册所有的编码器和复用器(理解为格式封装器)。该步骤必须放在所有ffmp阅读全文
posted @ 2019-03-10 12:12 灰色飘零 阅读(30) 评论(0) 编辑
摘要: 为什么要用多线程?在音视频领域主要是实现音视频同步。实现了音视频同步,我们的播放器就基本上合格了。 这里我们将讲解一下SDL的多线程与锁机制。 多线程的好处主要是能使程序更加充分利用硬件(主要是CPU)的性能。但是也存在相应的隐患,如果多线程管理不好,会出现协调问题。 引进的机制:线程的互斥与同步 阅读全文
posted @ 2019-03-08 21:21 灰色飘零 阅读(34) 评论(0) 编辑
摘要: 在前面我们讲了一下如何使用Java调用C,本文我们讲一下如何使用JNI提供的接口来反射得到Java方法进行调用。 主要步骤如下: 实战 Java层: C++层: 运行效果:阅读全文
posted @ 2019-03-08 16:28 灰色飘零 阅读(21) 评论(0) 编辑
摘要: 在JNI实战(二):Java 调用 C 我们了解了JNI的静态注册和动态注册。也知道我们应该使用动态注册来进行JNI函数与Java方法之间的映射。 示例的映射表的数组为如下: 我们第一个参数为Java层的方法,第三个参数为C层的方法,第二个参数为参数类型。这里()Ljava/lang/String;阅读全文
posted @ 2019-03-08 10:19 灰色飘零 阅读(53) 评论(0) 编辑
摘要: 1. JNI Env 和 Java VM 关系说明 JNIEnv 是 Java的本地化环境,是Java与C的交互的重要桥梁。 在Android上,一个进程对应一个JavaVM,也就是一个app对应一个JavaVM。 一个JavaVM可以有很多个线程,每一个Java线程对应一个JNI Env。 我们可阅读全文
posted @ 2019-03-07 15:39 灰色飘零 阅读(21) 评论(0) 编辑
摘要: 使用最新Android Studio的Cmake,创建一个Native C++项目后,我们就可以看到JNI的Hello World的项目及示例代码了。 JNI的项目代码,分为三层:Java层,C++层,CMake层。 其中Java层定义了调用C++的方法,C++层实现这个方法,CMake定义了如何将阅读全文
posted @ 2019-03-07 14:18 灰色飘零 阅读(19) 评论(0) 编辑
摘要: 在上文,我们做了YUV播放器,这样我们就入门了SDL播放视频。下面我们来做一个PCM播放,即使用SDL播放PCM数据。 下面说明一下使用SDL播放PCM音频的基本流程,主要分为两大部分:初始化SDL、循环播放数据。 1. 初始化SDL 1). 初始化SDL 执行的方法为SDL_Init(SDL_IN阅读全文
posted @ 2019-03-04 20:37 灰色飘零 阅读(18) 评论(0) 编辑
摘要: 前面铺垫了这么多,现在终于进入核心的主题了,那就是使用SDL播放视频,本节我们将使用SDL播放YUV视频,也就是做一个YUV播放器。 下面说明一下使用SDL播放YUV视频的基本流程,主要分为两大部分:初始化SDL、循环显示画面。 1. 初始化SDL 1). 初始化SDL (SDL_Init)2). 阅读全文
posted @ 2019-03-04 19:31 灰色飘零 阅读(19) 评论(0) 编辑
摘要: 本文我们讲一下如何使用SDL_Texture将视频纹理渲染出来。 1. SDL 视频渲染相关对象 SDL 视频渲染主要涉及到四个对象:SDL_Window、SDL_Render、SDL_Texture和SDL_Surface。 SDL_Window代表的是窗口的逻辑概念,它是存放在主内存中的一个对象阅读全文
posted @ 2019-03-03 18:43 灰色飘零 阅读(14) 评论(0) 编辑
摘要: 在前面学习SDL的例子运行时,我们发现我们的窗口只停留了几秒,但是如果设置更长时间显然也有其他的弊端。 那么有没有一种好的办法可以解决这个问题呢?例如:能不能让窗口一直显示,直到检测到用户用鼠标点击关闭按钮后才关闭呢? 答:显然可以! 下面就来介绍一下SDL的事件处理机制。 1. SDL 事件处理机阅读全文
posted @ 2019-03-03 18:05 灰色飘零 阅读(57) 评论(0) 编辑
摘要: 在上文 SDL 开发实战(二):SDL 2.0 核心 API 解析 我们讲解了SDL最核心的API,并结合Hello World代码了解了SDL渲染画面的基本原理。 本文我们来讲一下,如何使用SDL的API绘制基本的图形。 SDL中绘制基本图形的 API并不多,主要是 点、线、矩形、填充矩形。其它图阅读全文
posted @ 2019-03-02 12:28 灰色飘零 阅读(28) 评论(0) 编辑
摘要: 在上一篇文章 SDL 开发实战(一):SDL介绍及开发环境配置 中,我们配置好了SDL的开发环境,并成功运行了SDL的Hello World 代码。但是可能大部分人还是读不太明白具体Hello Wold的代码的意义。下面我们来根据SDL的使用思路来讲解一下SDL核心API,各位可以将此文结合上一篇文阅读全文
posted @ 2019-03-01 20:26 灰色飘零 阅读(21) 评论(0) 编辑
摘要: 一、什么是SDL? SDL是 “Simple DirectMedia Layer”的缩写,SDL是一个开源的跨平台的多媒体库,封装了复杂的音视频底层操作,简化了音视频处理的难度。 SDL使用C语言写成,提供了数种控制图像、声音、输出入的函数,可以开发出跨多个平台(Linux、Windows、Mac 阅读全文
posted @ 2019-02-28 18:41 灰色飘零 阅读(52) 评论(0) 编辑
摘要: 一、 java.lang.IllegalStateException: mpjni: setOptionLong: null mp 根据已查到的资料看,目前是ijk内部的问题,只能通过try&catch的方式进行处理。 参考:https://github.com/CarGuo/GSYVideoPla阅读全文
posted @ 2019-02-27 15:20 灰色飘零 阅读(47) 评论(0) 编辑