- 博客(31)
- 收藏
- 关注
原创 Android多媒体-音视频-基础知识
一帧是由一个或多个片(slice)组成的,一个片是由一个或多个宏块(MB)组成的(宏块是H264编码的基本单位),一个宏块是由16x16的yuv数据组成的。帧内(Intraframe)压缩的原理是:当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,一般采用有损压缩算法,由于帧内压缩是编码一个完整的图像,所以可以独立的解码、显示。(压缩率比I帧高,比B帧低)GOP结构一般有两个数字,其中一个是GOP的长度(即两个I帧之间的B帧和P帧数),另一个数字为I帧和P帧之间的间隔距离(即B帧数)。
2025-03-02 15:59:32
705
原创 Android多媒体-投屏-wfd之二
(算是在应用层协议?原因:server端没有去初始化P2P,也就没有在WiFi P2P框架中去注册,导致无法client端就无法发现设备,同时server端也要启动discoverPeers,这样才能确保能够被发现,并且GroupOwner也是Server端所持有(并不绝对,可以通过createGroup来决定,最好是在Server端)原因:mWifiP2pInfo?AirPlay:苹果开发的无线技术,通过WiFi传输,支持DLNA没有的镜像(设备显示什么,显示屏幕也显示什么)
2025-03-02 15:46:33
754
原创 Android多媒体-投屏-wfd之一
Wi-Fi Display经常和Miracast联系在一起。实际上,Miracast是Wi-Fi联盟(Wi-Fi Alliance)对支持Wi-Fi Display功能的设备的认证名称。通过Miracast认证的设备将在最大程度内保持对Wi-Fi Display功能的支持和兼容。Miracast的Android实现涉及到系统的多个模块,包括:MediaPlayerService及相关模块:原因很明显,因为Miracast本身就牵扯到RTP/RTSP及相应的编解码技术。
2025-03-02 15:18:58
700
原创 Android多媒体-视频-基础知识二
①.Camera应用中至少有两个Surface,一个使用于preview的,另一个使用来record的,record的surface是PersistentSurface类型,PersistentSurface中的GraphicBufferSource类型的成员变量mBufferSource最终由编码器创建引用;不在规定颜色空间内的像素值无法按实际值显示,图像、和显示器均有对应的颜色空间,两者不同时则需要转换到显示器的颜色空间再进行显示。Surface 对象使应用能够渲染要在屏幕上显示的图像。
2025-02-22 16:36:49
514
原创 Android多媒体-视频-基础知识一
MP4 是一种较为全面的容器格式,被认为可以在其中嵌入任何形式的数据,不过我们常见的大部分的 MP4 文件存放的 AVC(H.264)或 MPEG-4(Part 2)编码的视频和 AAC 编码的音频。缺点太多,体积过于庞大,而且更加糟糕的是压缩标准不统一。MP4 文件的媒体数据包含在 “mdat” 类型的 box(Midia Data Box)中,该类型的 box 也是 container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由 metadata 进行描述;
2025-02-22 14:47:03
512
原创 Android多媒体-音频-基础知识一
模拟音频信号转换为数字信号需要经过采样和量化,量化的过程被称之为编码,根据不同的量化策略,产生了许多不同的编码方式,常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为 WAV 文件了,它是一种由微软和 IBM 联合开发的用于音频数字存储的标准, 可以很容易地被解析和播放。回声消除的基本原理是以扬声器信号与由它产生的多路径回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断修改滤波器的系数,使得估计值更加逼近真实的回声。
2025-02-22 13:13:01
847
原创 Android多媒体-音频-高性能音频解析
最常见的接口是isBluetoothScoOn(), 这个接口在系统没有切换时候的时候,会很快返回,但是如果再插拔耳机,或者接听,挂断电话/VOIP电话时,就会耗时很长,导致caller线程,长时间阻塞,不产生数据。一个简单的场景,voip来电,这时候,需要和蓝牙耳机建立链路,握手过程,可能就需要150-300ms,整个过程非常耗时。削顶,又称为“削波”,原因是音频信号的响度,超过了编码范围,即0db,并不是说音源存在问题,只是音源信号,幅度太大,超过手机音频系统的表达能力,无法进行还原。
2024-11-25 16:34:38
1254
原创 Android解答者
Android资深架构师[造得一手牛逼的好轮子,熟悉Framework,Java高级知识等等]高级控件(ListView,RecyclerView,ViewPager,WebView…key-value存储[SharePreference,MMKV(腾讯)]内存优化[LeackCanary,BlockCanary]图片加载[Glide,Picasso,Fresco]http[请求头,响应体,三次握手,四次挥手等]数据库存储[SQL语句,SQLite]资深UI工程师[自定义控件,源码方向]
2024-09-07 20:06:31
2245
原创 Java解答者
常用工具:PLSQL Developer(Oracle)、Navicat(MySql)、FileZilla(FTP)、Xshell(SSH)、putty(SSH)、SecureCRT(SSH)、jd-gui(反编译)elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些。JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作。用过线程池吗,如果用过,请说明原理,并说说newCache和newFixed有什么区别,构造函。
2024-09-04 21:32:14
6380
原创 Android多媒体-音频-播放录制语音数据流向
c)compressed offload playback:用于音乐等声音输出,但是音频解码部分的工作是在Audio DSP中完成,AP侧只负责把音频码流送到Audo DSP中,送出去后AP侧会进行休眠,Audo DSP中会分配一块较大的buffer去处理此数据,在Audo DSP中进行解码、音效的处理等工作,在Audo DSP解码器处理完数据之前,它会唤醒AP侧去送下一包数据。但是在目前的主流的音乐播放APP中用的基本上都是deep buffer的播放模式,比如QQ音乐、网易云音乐和酷狗音乐等。
2024-08-31 13:11:02
1172
原创 Android多媒体-音频-重要模块
AudioFlinger 音频流管理由 AudioFlinger::PlaybackThread::Track 实现,Track 与 AudioTrack 是一对一的关系,一个 AudioTrack 创建后,那么 AudioFlinger 会创建一个 Track 与之对应,PlaybackThread 与 AudioTrack/Track 是一对多的关系,一个 PlaybackThread 可以挂着多个 Track。解析audio_effects.conf 文件,得到并加载 系统支持的音效库。
2024-08-31 12:05:16
1792
原创 Android多媒体-音频-框架流程图
一个应用涉及到的API层面包括APP层,FrameWork层,Native层,HAL层,Driver层。AudioService进程,使用Native层的API:AudioFlinger,AudioPolicyService。AudioHAL进程,使用HAL层的API:Device,StreamOut,StreamIn。AudioFlinger:音频策略的执行者,负责输入输出流设备的管理及音频流数据的处理传输。AudioRecord:负责录音数据的采集,属 Android 应用框架 API 类。
2024-08-31 11:43:15
543
原创 Android多媒体-视频-音视频同步
所以理论上,我们可以根据锚点, 计算出任意一点的媒体时间对应的系统时间(Buffer应该播放的时间). AVsync 的进本机理就是通过Audio每隔一段时间更新锚点, Video的Buffer根据锚点和媒体时间计算出应该播放的时(系统时间)AVsync的目的是获得Buffer显示的时间(buffer的系统时间).我们可以根据媒体时间和系统时间的线性关系计算出显示的时间。// (1000000LL / sampleRate): sampleRate一秒的采样数, 取倒数每一个采样的持续时间。
2024-08-31 10:38:31
1142
原创 Android多媒体-音视频-编码和封装格式
1.压缩比比较:aac>ogg>mp3(wma)>ape>flac>wav(同一音源条件下)mp3和wma以192kbps为分界线,192kbps以上mp3好,192kbps以下wma好。WMA(10~12),,APE(无损压缩,但庞大的WAV可以瘦身为APE),,ATRAC(1:5),,MP3(10~12),,AAC(18~20),,OGG(),,FLAC(1:2)无损格式,例如WAV,PCM,TTA,FLAC,AU,APE,TAK,WavPack(WV)
2024-08-31 09:58:00
414
原创 Android多媒体-音视频-文件格式
MP4格式标准为ISO-14496 Part 12、ISO-14496 Part 14,标准内容不是很多,下面我们来介绍一下格式标准中一些重要的信息。MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都不在话下,常见的大部分的MP4文件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的音频。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是阉割版的格式,如:M4V, 3GP, F4V等。
2024-08-31 09:39:29
3357
原创 Android多媒体-视频-流媒体协议
HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输。目前HLS协议被广泛的应用于视频点播和直播领域。
2024-08-31 09:19:17
1245
原创 Android多媒体-音视频-编解码技术
H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)NAL层:负责将VCL产生的比特字符串适配到各种各样的网络和多元环境中,覆盖了所有片级以上的语法级别。AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。
2024-08-31 09:15:46
2008
原创 Android多媒体-视频-录屏三种方式
createScreenCaptureIntent()这个方法会返回一个intent,你可以通过startActivityForResult方法来传递这个intent,为了能开始屏幕捕捉,activity会提示用户是否允许屏幕捕捉(为了防止开发者做一个木马,来捕获用户私人信息),你可以通过getMediaProjection来获取屏幕捕捉的结果。screenrecord是一个shell命令,支持Android4.4(API level 19)以上,录制的视频格式为mp4 ,存放到手机sd卡里,默认录。
2024-08-31 08:09:48
3101
原创 Android多媒体-视频-清晰度影响因素
特别在对质量和视频带宽都有要求的情况下,可以优先选择该模式,一般速度是VBR的两倍到三倍,相同体积的视频文件质量却比CBR好很多。其中,y为输入样本点编码,Qstep为量化步长,FQ为y的量化值。CBR:所谓的固定码率编码,是指视频编码的码率是固定不变的,不受图像复杂度的影响。在视频源一样,压缩算法也一样的前提下比较,量化参数,压缩比和码率之间是有直接的比例关系的。相反,max_qp是设置编码器可以使用的最大量化器,其默认值51是H.264标准中的最大值,但使用此值可能会导致输出质量非常低。
2024-08-31 07:52:39
1289
原创 Android多媒体-图片-解码
如果是encoder或decoder codec,就可以将自己的factory 函数注册到这个链表里面,然后当需要创建 encoder 或decoder codec 实例的时候,loop 这个list 找到对应的node, 然后调用factory函数。• SkTRegistry(Factory fact) 构造函数,用于注册一个 fact 函数,在使用链表的时候,可以通过节点的fact 获得需要的class, 如encoder 或 decoder codec.
2024-08-11 16:28:45
780
原创 Android多媒体-图片-编码
工作中遇到了Android中有关图片压缩保存的问题,发现这个问题还挺深,而且网上资料比较有限,因此自己深入研究了一下,算是把这个问题自顶至下全部搞懂了,在此记录。相关的几个问题如下:1.Android系统是如何编码压缩保存图片的?2.Skia库起到的作用?3.libJpeg库起到的作用?4.能不能自己调用Skia或libJpeg?
2024-08-11 16:21:08
1065
原创 Android多媒体-音频-dump节点
播放:fw(track>resample>drc>mixer>effect>writer)->hal(streamout>playbackhander)->adsp(primary/deepbuffer..)录制:adsp->hal(record>streamin)->fw(reader>convert>record)
2024-08-11 15:01:27
318
原创 Android多媒体-音频-xrun
2.underflow:应用写太快(出现这种情况,写应用会休眠;一般情况是不会发生这种情况。发生此种情况一般是DMA中断没有及时更新读指针,需要检测中断是否发生,中断发生后是否及时更新读指针)1.underrun:播放audiotrack写数据慢,PlaybackThread(AudioFlinger)播数据快,导致buffer空了,无数据可播出现卡顿。4.overflow:录制AudioFlinger写数据慢,AudioRecord读数据写入文件快,buffer空了导致卡顿。
2024-08-11 14:56:40
567
原创 Android多媒体-音频-基础知识二
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEAPHONES=0x100立体声蓝牙耳机。AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT= 0x40车载免提蓝牙设备。AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKR=0x200蓝牙话筒。AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET=0x20蓝牙电话。AUDIO_DEVICE_OUT_BLUETOOTH_SCO=0x10单声道蓝牙耳机。
2024-08-03 21:49:18
518
原创 Android多媒体-视频-MediaRecorder录像
早在在录制视频的过程中,如果设置的是不支持的分辨率或者Surface未创建成功,将会产生start failed异常,即在调用mMediaRecorder.start()时。MediaRecorder录像状态图。初始化MediaRecorder。以上可用于设置前后摄像头。
2024-08-03 17:27:04
320
原创 Android多媒体-视频-MediaPlayer播放
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。调用MediaPlayer的start()、stop()、pause()方法来控制视频播放。
2024-08-03 17:17:27
940
原创 GMS测试常见命令
run cts -m CtsMediaTestCases --shard-count 2 -s devicerun cts -m CtsMediaTestCases -t ******* -s devicerun cts --subplan *.xml -s device run retry --retry 100l r 、l s、l c
2024-08-03 16:53:30
228
原创 adb/git/addr2line/ffmpeg常用的命令
方法1:强制停止APP进程,不会清除APP进程在系统中产生的数据 adb shell am force-stop package 执行该命令后没有输出,手机对应进程已被杀死。adb shell pm list packages -f | grep "com.google.android.youtube"//根据包名找到对应apk。ps -ef|grep com.google.android.youtube//根据包名找到对应进程。adb shell logcat -c//清除log避免干扰。
2024-08-03 16:24:00
349
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人