Android Stagefright
zjc0888
这个作者很懒,什么都没留下…
展开
-
stagefright框架(一)Video Playback的流程
在Android上,預設的多媒體框架(multimedia framework)是OpenCORE。OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定;但是其缺點是過於龐大複雜,需要耗費相當多的時間去維護。從Android 2.0開始,Google引進了架構稍為簡潔的Stagefright,並且有逐漸取代OpenCORE的趨勢 (註1)。[圖1] Stagefright在Android多媒體架構中的位置。[圖2] Stagefright所涵蓋的模組 (註2)。以下我們就先转载 2011-03-26 11:27:00 · 6581 阅读 · 1 评论 -
Matroska数据封装
Matroska是一种新的多媒体封装格式,它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个Matroska Media文件当中!目录概览常见问题主要解码软件MKV的前途编辑本段概览 多媒体封装格式也称多媒体容器 (Multimedia Container),它不同于DivX、 MP3这类编码格式,它只是为多媒体编码提供了一个“外壳”,常见的AVl、VOB、MPEG、OGG格式都是属于这种类型。但这些封装格式要么结构陈旧,要么不够开放原创 2011-04-08 14:56:00 · 1214 阅读 · 0 评论 -
音视频编码的源数据
Audio PCM音频编码的源数据一般都是PCM(Pulse-codemodulation),说穿了就是将模拟信号的数据经过数字采样,量化以后的声音。举个简单的例子,比如一个正弦波的声音,我们从x坐标根据时钟来采集信号,然后将这些x对应的Y值经过一定的运算最后存储为二进制数据,这就是脉冲调制编码PCM的基本原理。而我们对音频的编码就是基于这个PCM,对其进行编码或者经过重新采样后进行编码。当然PCM也有很多种,使用了一些比较先进的技术,DPCM和ADPCM等等,主要使用了原创 2011-04-06 15:45:00 · 1366 阅读 · 0 评论 -
Android音频简介
最近移植Android,当Android能够在设备上面运行之后,首先想到的是让音频设备跑起来。“没有声音,再好的戏也出不来”。本文简单介绍一下Android音频适配层。 这个世界音频设备千变万化,Android也不可能为每种设备都提供支持。Android定义了一个框架,这个框架来适配底层的音频设备。该适配层的定义位于: hardware/libhardware_legacy/include/hardware_legacy/AudioHardwareInterface.h 要原创 2011-04-01 14:02:00 · 1716 阅读 · 0 评论 -
stagefright + omx小结
<br />由于stagefright和openmax运行在两个不同的进程上,所以他们之间的通讯要经过openBinder进行处理,对openBinder这一块还没有了解,所以恕stagefright和openmax之间的通信不能做分析,还有就是本小结不考虑音频这一块,假设视频为MP4封装的AVC编码文件.<br />最早看的是opencore,但opencore兼顾了多平台的移植性而过于复杂,后来就改看stagefright了,stagefright使用的OMX IL为opencore原创 2011-03-29 13:56:00 · 4644 阅读 · 1 评论 -
stagefright与opencore对比
<br />1引言<br />Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,弃用之前的opencore,仅仅对opencore中的omx-component部分做了引用。<br />Stagefright自android2.0后才添加,其稳定性有待商榷,是否存在bug也未知,opencore自android诞生起便存在,稳定性有保障。不过,从目前android代码看,opencore有被stagefright取代的原创 2011-03-26 11:43:00 · 3129 阅读 · 2 评论 -
stagefright框架(七)-Audio和Video的同步
<br />講完了audio和video的處理流程,接下來要看的是audio和video同步化(synchronization)的問題。OpenCORE的做法是設置一個主clock,而audio和video就分別以此作為輸出的依據。而在Stagefright中,audio的輸出是透過callback函式來驅動,video則根據audio的timestamp來做同步。以下是詳細的說明:<br /><br />(1) 當callback函式驅動AudioPlayer讀取解碼後的資料時,AudioPlayer會取原创 2011-03-26 11:40:00 · 3926 阅读 · 0 评论 -
stagefright框架(六)-Audio Playback的流程
到目前為止,我們都只著重在video處理的部分,對於audio卻隻字未提。這篇文章將會開始audio處理的流程。<br /><br />Stagefright中關於audio的部分是交由AudioPlayer來處理,它是在AwesomePlayer::play_l中被建立的。<br /><br /><br />(1) 當上層應用程式要求播放影音時,AudioPlayer同時被建立出來,並且被啟動<br /><br /><br />status_t AwesomePlayer::play_l()<br />{原创 2011-03-26 11:40:00 · 2757 阅读 · 0 评论 -
stagefright框架(五)-Video Rendering
AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video renderer,以便畫到螢幕上去。<br /><br />(1) 要將mVideoBuffer中的資料畫出來之前,必須先建立mVideoRenderer<br /><br /><br />void AwesomePlayer::onVideoEvent()<br />{<br /> ...<br /><br /> if(mVideoR原创 2011-03-26 11:38:00 · 3836 阅读 · 1 评论 -
stagefright框架(四)-Video Buffer傳輸流程
<br />這篇文章將介紹Stagefright中是如何和OMX video decoder傳遞buffer。<br /><br /><br />(1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且要求decoder將解碼後的data傳回來<br /><br /><br /><br />status_t OMXCodec::read(...)<br />{<br /> if(mInitialBufferSubmit)<br /> {<br /> mI原创 2011-03-26 11:36:00 · 3477 阅读 · 0 评论 -
stagefright框架(三)-選擇Video Decoder
<br />在《Stagefright (1) – Video Playback的流程》中,我們並沒有詳述Stagefright是如何根據影片檔的類型來選擇適合的video decoder,現在,就讓我們來看一看。(1) Video decoder是在onPrepareAsyncEvent中的initVideoDecoder被決定的<br /><br />OMXCodec::Create()會回傳video decoder給mVideoSource。<br /><br /><br />status_t Aw原创 2011-03-26 11:33:00 · 4556 阅读 · 2 评论 -
stagefright框架(二)- 和OpenMAX的運作
<br />Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。<br /><br />(1) OMX_Init<br /><br /><br /><br />OMXClient mClient;<br /><br />AwesomePlayer::AwesomePlayer()<br />{<br /> mClient.connect();<br />}<br /><br />status_t O原创 2011-03-26 11:32:00 · 4365 阅读 · 0 评论 -
录制中rampVolume参数溢出的问题
在录音的过程中发现在最前面的1s中总是会有“噗”的一声的噪音。一直在跟踪查找,发现是Android源码中有一处溢出造成的。stagefright中的AudioSource的void rampVolume(int32_t startFrame, int32_t rampDurationFrames, uint8_t *data, size_t bytes);函数(raise the volume f转载 2013-04-16 09:51:13 · 2553 阅读 · 0 评论