Implement a custom codec

Review(Stagefright) CustomExtractor MIMEとは(av/media/libstagefright/MediaDefs.cpp) const char *MEDIA_MIMETYPE_AUDIO_FLAC = “audio/flac”; const char *MEDIA_MIMETYPE_VIDEO_H263 = “video/3gpp”; const char *MEDIA_MIMETYPE_VIDEO_MYMIME = “video/IamSuperMan”; // You know,It’s just a sample * snfiffでMIMEを取得(CustomExtractorで実装、DataSourceへ登録) (参考:stagefright(3)-extractor) CustomPlugin * media_codecs.xml <MediaCodec name=”OMX.google.flac.encoder” type=”audio/flac” /> kComponents const struct { const char *mName; const char *mLibNameSuffix; const char *mRole; } kComponents[] = { { “OMX.google.mp3.decoder”, “mp3dec”, “audio_decoder.mp3″… Read More »

Android Meida Framework – stagefright(4)

Android Meida Framework – stagefright(4) AwesomePlayer Relation Review(Yes, It’s important) AwesomePlayer MediaPlay WorkFlow Four Steps for playing the Media File SetDataSource * MediaExtractor : MIMEタイプによって、該当するExtractorを使用 (参考:stagefright(3)-extractor) prepare TimedEventQueue AwesomePlayer里面定义了一个TimedEventQueue,通过向它发事件消息,来驱动player的运转。 AwesomeEvent的类型 mVideoEvent = new AwesomeEvent(this, &AwesomePlayer::onVideoEvent); mStreamDoneEvent = new AwesomeEvent(this, &AwesomePlayer::onStreamDone); mBufferingEvent = new AwesomeEvent(this, &AwesomePlayer::onBufferingUpdate); mVideoLagEvent = new AwesomeEvent(this, &AwesomePlayer::onVideoLagUpdate); mCheckAudioStatusEvent = new AwesomeEvent( this,… Read More »

Android Meida Framework – stagefright(3)

Android Meida Framework – stagefright(3) MediaExtractor Review(DataSource) **※AwesomePlayer::setDataSource ** status_t AwesomePlayer::setDataSource(int fd, int64_t offset, int64_t length) { … sp<DataSource> dataSource = new FileSource(fd, offset, length); … mFileSource = dataSource; … return setDataSource_l(dataSource); } status_t AwesomePlayer::setDataSource_l( const sp<DataSource> &dataSource) { sp<MediaExtractor> extractor = MediaExtractor::Create(dataSource);// MediaExtractor的生成 if (extractor == NULL) { return UNKNOWN_ERROR; } if (extractor->getDrmFlag()) {… Read More »

Android Meida Framework – stagefright(2)

Android Meida Framework – stagefright(2) DataSource Architecture Review(MediaPlayer) DataSource’s FLow Player creation SetDataSource1 (APP→MediaPlayerService) * MediaPlayer::setDataSource() //JNI status_t MediaPlayer::setDataSource(int fd, int64_t offset, int64_t length) { ALOGV(“setDataSource(%d, %lld, %lld)”, fd, offset, length); status_t err = UNKNOWN_ERROR; const sp<IMediaPlayerService>& service(getMediaPlayerService()); if (service != 0) { sp<IMediaPlayer> player(service->create(this, mAudioSessionId));//MediaPlayerService.create if ((NO_ERROR != doSetRetransmitEndpoint(player)) || (NO_ERROR != player->setDataSource(fd, offset,… Read More »

Android Meida Framework – stagefright(1)

Android Meida Framwork – stagefright(1) Stagefright Overview Architecture Review Stagefright WorkFlow 解析(paser) マルチメディアデータファイルの構造を解析 デコード(decode) OpenMAX IL の API を使ってデコードする レンダリング(render) データをSurfaceFlinger 、AudioFlingerへ渡し、再生する (参考 播放器的基本模型 ) Stagefright Overview 緑 : DataSource、MediaSource と MediaExtractor。 MediaExtractor is responsible for retrieving track data and the corresponding meta data from the underlying file system or http stream; ファイル/ストリームからフレーム(やメタデータ)をパースする処理部分。 オレンジ :… Read More »

Media Player WorkFlow

WorkFlow TopView Android Android application and the media server run on separate processes Media Server Media Server is started at boot time Codecs, file parsers, network stack SF, AF SF, AF : Hardware abstractions for the audio and video Flinger The software implementation that combines either the visual surfaces or the audio output from multiple… Read More »

Android Meida Framwork Architecture

Android Meida Framwork Architecture Where is Meida Framwork Media architecture Application Framework At the application framework level is the app’s code, which utilizes the android.media APIs to interact with the multimedia hardware. 提供了android media的API (frameworks/base/media/java) Binder IPC The Binder IPC proxies facilitate communication over process boundaries. They are located in the frameworks/av/media/libmedia directory and begin… Read More »

Codec

Codec 编解码器(英语:codec)指的是一个能够对一个信号或者一个数据流进行编解码操作的设备或者程序。 这里指的变换既包括将信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作, 也包括为了观察或者处理从这个编码流中恢复适合观察或操作的形式的操作。 编解码器对应的英文“codec”(coder和decoder簡化而成的合成詞語) 编解码器编码一个数据流或者用于传输、存储、加密的信号,解码一段用于回放或编辑。 大多数「视频文件」都同时包含视频和音频,因此编码后至少都有两组二进制数据, 并且两组数据必须按照特定的方式同步起来,否则我们看到的画面和听到的声音将不吻合。 为了解决编码后多组不同类型的的数据的存储、传输问题,需要将他们按照一定的规律组织起来,这种组织方式即是「容器格式」。 我们常见的视频文件扩展名包括 .avi, .rmvb, .mp4, .mkv 等。其实扩展名都是指的某种容器格式 TS 传送流(Transport Stream)简称TS流,它是根据ITU-T Rec.H.222.0|ISO/IEC 13818-2 和ISO/IEC 13818-3协议而定义的一种数据流,其目的是为了在有可能发生严重错误的情况下进行一道或多道程序编码数据的传送和存储。 Reference 编解码器

HighResolution

HighResolution ハイレゾリューション ハイレゾリューションオーディオ (英: High-Resolution Audio) とは、音楽用CD(CD-DA)を超える音質の音楽データの総称。 JEITAによる定義 リニアPCM換算でサンプリング周波数、量子化ビット数の一方がCDスペックを超えていればハイレゾリューションオーディオの定義に合致する。ただし、一方がCDスペックを超えていても、もう一方がCDスペック未満の場合は、ハイレゾリューションオーディオとはみなされない。なお、JEITAはCDスペックを44.1~48kHz/16bitと定義している。 サンプリング周波数  サンプリング周波数とはアナログ信号からデジタル信号への変換(標本化)を1秒間に何回行うか を表す数値で単位はHzです。 ※CDの音源は44.1KHzなので1秒間の44100に区切ってアナログ信号を標本化、192Hzのハイレゾ音源は1秒間を192,000に区切って アナログ信号を標本化しています。 量子化ビット数 量子化ビット数とは音の大きさを最も小さな音から最も大きな音を何段階で再現するかを表します。 16ビットとは2の16乗という意味で、 16ビットのCDは最も小さな音から最も大きな音までを65536段階差で表現することが可能なのに対応して、 24ビットのハイレゾ音源は2の24乗の16,777,216段階の音量差で表現することが可能です。 ファイルフォーマット(HighResと限っていない) 非圧縮 WAV AIFF DFS 可逆圧縮 FLAC Free Lossless Audio Codecの略で、フリーで提供されている可逆圧縮音声ファイル・フォーマットのひとつです。 非可逆圧縮 MP3 AAC WMA Reference はじめてのハイレゾ ハイレゾ音源とは

Android Media Index

Android Media Index Concept HighResolution Codec Android Media Framwork  Media Framwork Architecture MediaPlayer WorkFlow Stagefright Overview Stagefright-DataSource Stagefright-MediaExtractor Stagefright-AwesomePlayer Implement Adding a custom decoder Reference