Android-Multimedia
lin-0410
最痛苦的事情,不是失败了,而是我本可以......
所以,如果目标还没去实现,不要感叹为时已晚,因为种一棵树最好的时间是十年前,其次是现在!
展开
-
使用mediacodec做视频解码
记录一下做视频解码的demo:github地址:https://github.com/whcx/AudioVideoEncoderDecoder存储权限申请: 当前项目targetSdkVersion 29,按之前方式动态申请权限 Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,无法在sdcard的共有目录创建文件。 可以使用context.getExternalFilesDi原创 2020-09-01 09:23:36 · 2407 阅读 · 0 评论 -
BitMap内存占用
BitMap加载后,占用内存大小:width * height *每个像素占的字节数代码中获取bitmap占用内存大小的计算:public final int getByteCount() @Bitmap.java{ return getRowBytes() * getHeight();}其中的getRowBytes()调用的是native方法,具体在android源码...原创 2020-01-20 17:23:38 · 540 阅读 · 0 评论 -
Camera + opengl es 使用opengls绘制摄像头数据(二)
实现Camera数据的预览,可以使用TextureView,作为View heirachy的一个硬件加速层,从SurfaceTexture中获取到的纹理数据更新到HardwareLayer中,完成显示;也可以如这篇文章里讨论的,使用opengles完成绘制,相比较与前一种,使用opengles实现绘制,可以更方便的借助opengl的强大api添加特效处理,比如完成美颜的功能等.OpenGL...原创 2020-03-22 10:45:24 · 3428 阅读 · 3 评论 -
Android中音频元数据的采集,及RTMP推流
在用手机做直播推流时,不管是录屏直播,还是摄像头直播,都要用到音频的元数据.在Android中,可以借助AudioRecord来采集音频数据,然后通过faac编码库,将编码后的数据交给RTMP去封包后发送给服务器.这篇主要讨论从AudioRecord获取音频数据,然后通过faac编码,经过RTMP封包后发送到直播服务器的过程.一,如果要使用手机的录音功能,需要在AndroidMan...原创 2020-03-19 21:14:00 · 2241 阅读 · 1 评论 -
Camera直播视频数据的获取,及RTMP推流(一)
通过摄像头直播推流的场景中,需要先从摄像头获取去视频元数据,然后交给x264编码器(加入用的视频编码器是x264)编码,最后经RTMP封包后发送给服务器.我们使用CameraX来获取摄像头数据,对于CameraX的使用,参考官方文档:https://developer.android.google.cn/training/cameraxCameraX 是一个 Jetpack 支持库,旨...原创 2020-03-19 23:25:53 · 5164 阅读 · 1 评论 -
视频相关概念
转自:http://www.samirchen.com/video-concept/视频相关概念视频文件格式文件格式这个概念应该是我们比较熟悉的,比如我们常见的 Word 文档的文件格式是.doc,JPG 图片的文件格式是.jpg等等。那对于视频来说,我们常见的文件格式则有:.mov、.avi、.mpg、.vob、.mkv、.rm、.rmvb等等。文件格式通常表现为文件在操作系...转载 2020-03-13 17:13:11 · 664 阅读 · 0 评论 -
ubuntu下编译ffmpeg的过程
后续一段时间准备音视频相关知识的学习,所以先编译ffmpeg做练习用.以最新版本的android api 29, ndk21, ffmpeg4.2,编译ffmpeg库文件.1,环境配置,1)安装yasm,如果没有安装会报nasm not found的错误.下载http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar....原创 2020-02-27 19:44:47 · 955 阅读 · 0 评论 -
Galley、Camera中缩略图的生成
一,图库中缩略图的生成图库中对图片、video 的解码会通过ImageCacheRequest.java来完成,具体在run方法中:snapdragonGallery/src/com/android/gallery3d/data/ImageCacheRequest.javapublic Bitmap run(JobContext jc) { ImageCacheService ca...原创 2018-02-24 15:07:36 · 1677 阅读 · 1 评论 -
音视频开发基础
把多媒体的log打开,或者只打开av目录:find ./frameworks -type f | xargs sed -i 's://#define LOG_NDEBUG 0:#define LOG_NDEBUG 0:'Android视频开发进阶,原文链接:http://www.jianshu.com/u/a32db45d4859Android视频开发进阶(part2-MP4文件的解析...转载 2018-03-17 07:07:42 · 863 阅读 · 1 评论 -
音频的回放流程-播放器的创建及数据准备(提取,解码)
这篇文章的目的是疏通从应用端到服务端到本地库之间的播放链路是怎么打通的,其中涉及的具体细节,比如AMessage,ALooper机制,codec,renderer,AduioTrack和AudioFlinger间buffer的共享等,没有详细分析。根据mediaplayer的状态机,一个音频的回放通常是从idle经过setDataSource()到Initialized状态,然后通过prepare...原创 2018-04-06 23:15:56 · 1748 阅读 · 0 评论 -
音频的回放流程-音频回放链路的创建(解码后的数据送到回放设备)
接上篇 播放器创建6,下面开始看数据是怎么送到播放设备的。解码后的数据处理,除了CB_OUTPUT_AVAILABLE,还可能有一个CB_OUTPUT_FORMAT_CHANGED,对应的消息处理都是在NuPlayer的Decoder中。04-0209:13:33.703 V/NuPlayerDecoder( 544): [audio] kWhatCodecNotify: cbID= 4, pa...原创 2018-04-06 23:30:07 · 2078 阅读 · 0 评论 -
视音频录制流程 (一)
音视频录制状态机:start→ Initial -→Initialized → DataSource Configured → Prepared-→Recording 录制过程从上到下涉及很多模块:1),app层,描述各种录制参数;2)framework层,主要指java层framework,如MeidaRecorder,在收到app层的录制需求后,协调camera,micphone等模块完成录制...原创 2018-04-23 22:59:59 · 1751 阅读 · 0 评论 -
视音频录制流程(二)
接续:https://blog.csdn.net/lin20044140410/article/details/80057981前面的过程漏了一点,就是camera设备的打开过程,也就是mCamera=Camera.open(CAMERA_ID),分析的recorder.setCamera(mCamera);中的参数就是open的返回值。open()的过程还是很长的,下面只关注跟cameraS...原创 2018-04-23 23:09:43 · 1129 阅读 · 0 评论 -
RingTone的使用
RingTone 提供了一个快速的方法,播放铃声,提示音,或其他类似类型的声音。使用案例: import android.content.Context;import android.media.AudioAttributes;import android.media.AudioManager;import android.media.Ringtone;import andr...原创 2018-12-05 14:58:21 · 2009 阅读 · 0 评论 -
MediaPlay Api的使用
MediaPlay 用来控制音频、视频文件和流的回放。 状态图 回放控制是通过一个状态机来管理的。 椭圆图代表MediaPlay实例可能存在的一个状态; 弧线代表使状态之间转换的操作; 单箭头代表同步的方法调用; 双箭头代表异步的方法调用。 一个MediaPlay实例有以下状态: 当new或者reset被调用,来创建MediaPla...原创 2018-12-05 15:11:25 · 1394 阅读 · 0 评论 -
Android P新的图片格式 HEIF 调研
备忘,以后用到好查,转:https://segmentfault.com/a/1190000015947004?utm_source=tag-newestHEIFHEIF是什么?HEIF format & features?HEIF优缺点,商业价值?Nokia HEIF?Android P对HEIF的支持情况?IOS对HEIF的支持情况?兼容性问题?HEIF是...转载 2019-03-15 16:39:58 · 1707 阅读 · 0 评论 -
SnapdragonGallery数据结构
Gallery 数据结构(仅包含数据怎么组织,不包括UI布局)分析这个数据结构的目的是为把Videoset移到Albumset界面提供可行思路。需求是把videoset放在albumset的第一个位置,有视频时显示,无视频时隐藏,在这个布局中videoset不支持长按选择。TimeLinePagetypeBits 是DataManager.INCLUDE_ALLgetTop...原创 2019-08-29 14:18:04 · 460 阅读 · 0 评论 -
Gallery2 的数据加载及渲染
图库主要的显示界面图库主要的显示界面包括:相册集AlbumSetPage,相册AlbumPage,图片预览PhotoPage,这些界面都有一个父类:ActivityState;界面的管理由StateManager负责。public class AlbumSetPage extends ActivityState{}public class StateManager {//根据传入的界面的.cl...原创 2017-08-21 18:51:44 · 3761 阅读 · 1 评论 -
Android中Gif的解码、播放
Gif的文件格式,可以参考另外两篇转载的博客:Gif文件格式,Gif文件格式项目中,会把Gif的解码、播放提交到一个线程池中执行,线程池的用法可以参考另一篇文章,ThreadPoolExecutor的使用。以下范例代码来源于图库Gallery,首先把Gif解码的任务提交到线程池:mThreadPool.submit(new GifDecoderJob(item), new GifDecoderLi...原创 2018-02-14 11:49:52 · 418 阅读 · 0 评论 -
Camera2框架从Java层到C++层类关系
转自:http://blog.csdn.net/hejjunlin/article/details/53138945 Agenda:getSystemService(Context.CAMERA_SERVICE)CameraManager.getCameraIdList()ICameraService.aidlICameraService.cppcamera2中从Java层转载 2017-10-20 14:54:37 · 762 阅读 · 0 评论 -
Camera (api1)的打开过程
Camera (api1)的打开过程 setModuleFromIndex()@CameraActivity.javaà{ mPhotoModule = new PhotoModule();mPhotoModule.init(this,mCameraPhotoModuleRootView); mCurrentModule= mPh原创 2017-09-04 18:29:39 · 906 阅读 · 0 评论 -
Android 音频子系统,音频系统跟应用层直接相关的部分(八)
音频系统跟应用层直接相关的部分从上层看,跟音频相关的功能概括说就是音频、视频的的录制、回放。与之直接相关的类有MediaPlayer,MediaRecorder。他们具有同时处理音频、视频的能力。1, MediaPlayer主要处理音视频的回放,它是一个状态机,依赖于MediaPlayerService来完成具体功能,并项应用程序反馈当前的播放情况。如下是MediaPlayer的状态原创 2017-11-15 17:00:51 · 944 阅读 · 0 评论 -
Android音频子系统,音量的调节控制(七)
音量的调节控制:按下音量的加减键,对应的keyevent是:KEYCODE_VOLUME_DOWN,KEYCODE_VOLUME_UP。主要看两个地方对这一事件的处理,一是:handleKeyDown()@AudioManager.java,一是:interceptKeyBeforeQueueing ()@PhoneWindowManager.java。 先看AudioMana原创 2017-11-15 16:48:19 · 5088 阅读 · 0 评论 -
Android音频子系统,音频流(六)
音频数据流音频正常的回放过程:比如用MediaPlayer播放音频,先要把音频文件读取到内存中,然后执行对应的解码操作,mediaplayer是在mediaplayerservice的帮助下完成解码相关操作的,mediaplayerservice会使用audiotrack完成播放功能。一个audiotrack代表一个播放实例,系统中可能同时运行多个audiotrack实例,同时系统中也会有多个音频...原创 2017-11-15 16:29:48 · 1675 阅读 · 0 评论 -
Android音频子系统,Audiopolicyservice音频策略的制定(五)
Audiopolicyservice的路由实现:Audiopolicyservice作为音频策略的制定者,功能的实现跟audiotrack(使用者)有较大关联,所以在紧接着audiotrack看下路由的过程。路由,就要有发送方,接收方,这个场景中发送发就是Audiotrack,接收方就是audioflinger(策略的执行者),audiopolicyservice是这两者的桥梁,它内部拥有当前系统...原创 2017-11-15 16:23:23 · 3583 阅读 · 0 评论 -
Android音频子系统,音频流的回放(四)
Audiotrack被用于音频流的回放,用来传输数据。AudioTrack支持两种数据模式:一种是Static,静态就是指数据一次性交付给对方,简单高效,一次完成所有数据的传递。适用于铃声、系统提醒等对内存要求小的播放操作。一种是streaming,流模式和基于网络的音频流回放类似,音频数据严格按照要求不断地传递给接收方,直到结束。通常适用于音频文件较大时;音频属性要求高,如采样率高、深度大的数据...原创 2017-11-15 16:15:23 · 1073 阅读 · 0 评论 -
Android音频子系统,AudioPolicyService(三)
AudioPolicyServiceAudioFlinger是音频策略的执行者,AudioPolicyService是策略的制定者。Android系统中声音被换分为多个种类:AudioSystem.javapublic class AudioSystem{ public static final int STREAM_DEFAULT = -1; public static final int ...原创 2017-11-15 15:39:53 · 1244 阅读 · 0 评论 -
android 音频子系统-AudioFlinger(二)
音频系统的核心:AudioFlingerAudioFlinger为上层提供访问和管理音频的接口,同时通过hal来管理音频设备。AudioFlinger服务的启动:Framework/av/media/audioserver/main_audioserver.cppint main(int argc __unused, char **argv){ AudioFlinger::instantiat...原创 2017-11-15 14:59:17 · 4641 阅读 · 3 评论 -
android 音频子系统框架(一)
Android 音频框架: 1,与应用程序开发有直接关联的是MediaPlayer,MediaRecorder。音频系统的核心由AudioFlinger、AudioPolicyService、AudioTrack/AudioRecorder三部分构成,其中AudioFlinger、AudioPolicyService属于system service,驻留在audioserver进程,负责不断地处理...原创 2017-11-15 14:54:51 · 3380 阅读 · 5 评论 -
多媒体文件管理,资源的扫描MediaScanner(二)
多媒体文件的扫描MediaScanner主要由两部分组成,一是MediaScannerReceiver,一是MediaScannerService,扫描的执行由广播触发。MediaScannerReceiver接收4中类型的广播:AndroidManifest.xml原创 2017-11-14 18:01:06 · 984 阅读 · 0 评论 -
多媒体文件管理-数据库external.db,internal.db (一)
多媒体数据库路径:data/data/com.android.providers.media/database/external.db||internal.db多媒体文件管理主要组成部分:1),MediaScannerService,扫描多媒体文件。 扫描的对象包括内部、外部存储设备,它继承自service,并实现了Runnable接口,在一个独立的线程中执行扫描操作。原创 2017-11-14 15:47:51 · 17971 阅读 · 0 评论 -
Camera2(api2) 打开过程(一)
C++层log的输出,如果不全,可以调整log的级别:adb shell dumpsys media.camera -v 1 ,至少改成>=1。 Camera2 打开过程 public void onCreateTasks(Bundle state)@ CameraActivity.java{ mFirstRunDialog = new FirstRunDialog(this...原创 2017-08-02 17:00:54 · 7074 阅读 · 1 评论 -
camera2 (api2)打开预览过程(二)
使用camera的流程: openCamera() -> applySettings() -> setPreviewTexture() -> startPreview() ->autoFocus() -> takePicture()。打开camera设备的大致过程:1, 实例化CameraModule对象,即mCurrentModule表示当前的module,默认是...原创 2017-08-21 09:03:29 · 5740 阅读 · 0 评论 -
Android camera角度问题
转载:相机角度1. android相机简介由于Android系统的开放策略,Android手机呈现碎片化的趋势,兼容性问题一直是Android App 开发者头疼的难题。本文以Android相机预览方向为例,探索在Android机型适配上的一些思路。1.1 相机架构先了解下Camera的框架,它是分层的结构。由上向下分别是1)应用层2)Camera系统的Java类3)Camera的JNI代码4)C...转载 2018-02-27 17:46:36 · 6461 阅读 · 0 评论 -
输出流设备决定了playbackthread
转载:点击打开链接,点击打开链接Android 音频框架概述Audio 是整个 Android 平台非常重要的一个组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理、音量调节等,主要包括如下部分:Audio Application Framework:音频应用框架AudioTrack:负责回放数据的输出,属 Android 应用框架 API 类AudioRecord:负责录音数据的采...转载 2018-02-28 16:01:46 · 3531 阅读 · 0 评论 -
Android Media Framework(1): 总纲
转:https://www.jianshu.com/p/593b14444e79Android系统整体架构:我们先看一下多媒体框架在整个Android系统所处的位置Android多媒体框架opencore和stagefright分析从框架图可以看出Media Framework处于Libraries这一层,这层的Library不是用Java实现,一般是C/C++实现,它们通过Java的JNI方式调...转载 2018-03-15 17:21:03 · 582 阅读 · 0 评论 -
Camera框架之Camera2
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52751055 前言:监于5.0之后Google用的是Camera2相关API取代之前的Camera,过时的Camera虽然精典,但不再进行介绍,可自行查阅相关资料。今天本文是在正式深入代码前对Camera2的一个补充。上篇中转载 2017-10-20 14:10:42 · 873 阅读 · 0 评论