Android音视频API - MediaCodec/MediaMuxer/MediaStore/MediaController等
AudioTrack播放音頻PCM。[Android] 混音器AudioMixer。
MediaPlayer/MediaRecorder, AudioTrack/AudioRecorder, MediaCodec。
-- 使用MediaCodec和MediaMuxer的過程中遇到的問題,總結下需要注意主要有以下幾點:
?1.MediaCodec是Android4.1新增API,MediaMuxer是Android4.3新增API。
?2.顏色空間。按照Android本身的意思,COLOR_FormatYUV420Planar應該是所有硬件平臺都支持的。但是實際上并不是這樣。所以在設置顏色空間時,應該獲取硬件平臺所支持的顏色空間,確保它是支持你打算使用的顏色空間,不支持的話應該啟用備用方案(使用其他當前硬件支持的顏色空間)。
?3.視頻尺寸,在一些手機上,視頻錄制的尺寸可以是任意的。但是有些手機,不支持的尺寸設置會導致錄制的視頻現錯亂。博主在使用Oppo R7測試,360*640的視頻,單獨錄制視頻沒問題,音視頻混合后,出現了顏色錯亂的情況,而在360F4手機上,卻都是沒問題的。將視頻寬高都設置為16的倍數,可以解決這個問題。
?4.編碼器格式設置,諸如音頻編碼的采樣率、比特率等,取值也需要結合硬件平臺來設置,否則也會導致崩潰或其他問題。這個其實和顏色空間的選擇一樣。
?5.網上看到許多queueInputBuffer中設置presentationTimeUs為System.nanoTime()/1000,這樣做會導致編碼出來的音視頻,在播放時,總時長顯示的是錯誤的。應該記錄開始時候的nanoTime,然后設置presentationTimeUs為(System.nanoTime()-nanoTime)/1000。
?6.錄制結束時,應該發送結束標志MediaCodec.BUFFER_FLAG_END_OF_STREAM,在編碼后區獲得這個標志時再終止循環,而不是直接終止循環。
-- 音視頻API架構
?android-java層:camera相關(視頻)、AudioRecord(音頻)相關、MediaCodec相關(音視頻編碼)。
?android-native層(c++):h264、h265等編碼庫的調用;各種音頻編碼庫的使用(aac、amr、mp3、g711等);容器封裝技術(音視頻封裝ts、ps等);
媒體協議(hls、rtsp、rtmp等);socket編程;android-ndk編譯so技術;jni技術等。
-- 音頻通過G711u,視頻通過H264。
? 利用Android4.1增加的API MediaCodec和Android 4.3增加的API MediaMuxer進行Mp4視頻的錄制。
? 冗余消除:時域冗余,空域冗余,統計冗余,視覺冗余。時域冗余就是時域上幀與幀之間的相關性。采用運動補償就可以實現消除冗余。空域冗余就是空間上,比如我們描述藍天,其實一片藍天有很多相似的元素。這時候就提出了一種方法就叫做幀內預測。統計冗余可以理解為進行比如熵編碼的時候,我們要是對每一個編碼都進行等長編碼的話,那么就有大量冗余,畢竟不同元素出現的概率不一樣。所以呢就提出了哈夫曼編碼,量化。視覺冗余呢就是針對人眼特性對視頻進行適當處理。現在有一個很火的東西就是感興趣編碼(ROI)。
Video ? Render: OpenGL ES,MediaCodec;
Audio ? Render: OpenSL ES,Audio Track;
HardWare Codec: Media Codec 。
--??MediaExtractor用于音視頻分路,和MediaMuxer正好是反過程。MediaFormat用于描寫敘述多媒體數據的格式。MediaRecorder用于錄像+壓縮編碼。生成編碼好的文件如mp4, 3gpp,視頻主要是用于錄制Camera preview。MediaPlayer用于播放壓縮編碼后的音視頻文件。
? AudioRecord用于錄制PCM數據。AudioTrack用于播放PCM數據。PCM即原始音頻採樣數據。能夠用如vlc播放器播放。
1. 在AndroidManifest.xml里加上錄音權限,否則創建AudioRecord對象時鐵定失敗:
?<uses-permission android:name="android.permission.RECORD_AUDIO"/>
2. 音視頻通過PTS同步,兩個的單位要一致。
3. MediaMuxer的使用要依照Constructor -> addTrack -> start -> writeSampleData -> stop 的順序。假設既有音頻又有視頻,在stop前兩個都要writeSampleData()過。
-- 視頻的分離合成我主要用到了MediaExtractor和MediaMuxer兩個類:?
?MediaExtractor是用于提取多路的、通常編碼的視頻資源的,通過它我們可以選擇音頻或者視頻軌,然后分別對它們進行操作等;?
?MediaMuxer是用于復用基本流的,用它可以將音頻和視頻合成,目前支持輸出MP4,Webm和3GP格式的視頻,在Android7.0以后支持多路復用幀的MP4。?
?MediaFormat封裝了描述媒體數據格式的信息,如音頻或視頻,通過它我們可以取出音頻或者視頻。
音視頻采集、美顏/濾鏡/特效處理、編碼、封包、推流、轉碼、分發、解碼/渲染/播放等。
-- Android提供的MediaCodec及其相關類為我們提供了所需的方法,這些類主要包括:MediaCodec、MediaExtractor、MediaMuxer、MediaFormat。
?1.MediaCodec用于創建視音頻編解碼器,通過它可以對視音頻數據進行編解碼操作,它是編解碼功能的核心類。
?2.MediaExtractor相當于一個reader,它用于讀取媒體文件,并提取出其中的視音頻數據。
?3.MediaMuxer相當于一個writer,它用于將內存中的視音頻數據寫到文件中。
?4.MediaFormat即媒體格式類,它用于描述媒體的格式參數,如視頻幀率、音頻采樣率等。
-- Android5.0 MediaProjection可運用到小型會議PPT演示、手游直播等行業。使用攝像頭采集視頻數據,并通過MediaCodec進行H264編碼,之后打包成RTSP格式并上傳的。
? TextuewView也提供了一個setTransform方法,該方法接收一個matrix參數,使用該參數對當前的渲染內容進行轉換.
Android MediaMuxer錄像(支持G711音頻)- https://blog.csdn.net/jyt0551/article/details/72787095
?Android平臺的MediaMuxer是個非常好的錄像庫,它能將H.264視頻+AAC音頻存儲成.mp4格式的文件,而且穩定性、同步效果都非常好。?Android MediaMuxer過程:創建對象、添加音視頻軌道、開始、持續寫入音視頻數據、關閉這樣一個過程。MediaMuxer并不支持對除AAC以外的音頻編碼格式的封裝,然而在安防行業里G711音頻格式的數據是大多數設備的默認編碼格式。如何支持G711格式的數據呢?其實換種思路就會豁然開朗,我們可以先把G711數據解碼成PCM,再用MediaCodec編碼成AAC,這樣曲線存儲。不光是G711,所有的音頻編碼格式都可以這樣做哈哈。。
? 基于其更高的壓縮比,H.265適用于安防行業再合適不過了!因為安防行業每天都有著海量的視頻數據在產生,同時需要實時傳輸、分析、存儲…在帶寬和存儲成本依然昂貴的今天,我們極度需要更低的碼率!更低的碼率就等同于更低的成本,因此今天各個安防廠商已經逐漸將視頻設備由264轉移到265了,這同時對于265編碼也有著積極的推動作用.
? 不是所有的安卓機都支持H.265的硬解碼,對于這些不支持硬解碼的,使用ffmpeg進行軟解即可,這方面資料也不在少數。
? 流媒體協議,RTSP協議,也包括hTTP\RTSP\RTMP\HLS\FILE等格式都支持.
-- AudioTrack,mediaplay
1、android提供的音視頻編碼只有 AMR-NB(nb是窄頻)和H.263
2、android雖然支持gif的解碼,只能用mediaplay來播放,但是效果不好
3、android不支持flv的解碼
4、AudioTrack只能播放pcm編碼的數據,MediaPlayer可以播放MP3,AAC,WAV,OGG,MIDI等
? 事實上,兩種本質上是沒啥區別的,MediaPlayer在播放音頻時,在framework層還是會創建AudioTrack,把解碼后的PCM數據傳遞給AudioTrack,最后由AudioFlinger進行混音,傳遞音頻給硬件播放出來。利用AudioTrack播放只是跳過 Mediaplayer的解碼部分而已。Mediaplayer的解碼核心部分是基于OpenCORE 來實現的,支持通用的音視頻和圖像格式,codec使用的是OpenMAX接口來進行擴展。因此使用audiotrack播放mp3文件的話,要自己加入 一個音頻解碼器,如libmad。否則只能播放PCM數據,如大多數WAV格式的音頻文件。
-- MediaCodec 是 API 16 之后 Google 推出的用于音視頻編解碼的一套偏底層的 API,可以直接利用硬件加速進行視頻的編解碼。調用的時候需要先初始化 MediaCodec 作為視頻的編碼器,然后只需要不停傳入原始的 YUV 數據進入編碼器就可以直接輸出編碼好的 H.264 流,整個 API 設計模型同時包含了輸入端和輸出端的兩條隊列。
?一般來說,起碼在 4.4+ 的系統上,這兩種格式在大部分機器上都有支持:
? MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar;
? MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar;
?除了使用 MediaCodec 進行編碼之外,另外一種比較流行的方案就是使用 FFmpeg + x264/OpenH264 進行軟編碼,FFmpeg 適用于一些視頻幀的預處理。這里主要是使用 x264/OpenH264 作為視頻的編碼器。
? x264 基本上被認為是當今市面上最快的商用視頻編碼器,而且基本上所有 H264 的特性都支持,通過合理配置各種參數還是能夠得到較好的壓縮率和編碼速度的。
? OpenH264 則是由思科開源的另外一個 H264 編碼器,項目在 2013 年開源,對比起 x264 來說略顯年輕,不過由于思科支付買了 H.264 的年度專利費,所以對于外部用戶來說,相當于可以直接免費使用了。另外,firefox 直接內置了 OpenH264,作為其在 WebRTC 中的視頻編解碼器使用。
? https://chromium.googlesource.com/libyuv/libyuv/ Google 開源的一個 YUV 處理庫,上面只針對 1080p->540p 視頻幀縮放的算法,而對于通用的壓縮處理,可以直接使用這里的實現,對比起 FFmpeg 的速度快上不少。
> MediaCodec編碼解碼視頻H.264,學習 MediaCodec API,完成視頻 H.264 的硬編、硬解
? 在Android里,最常用的視頻編碼解碼用的API就是mediacodec了,可以進行多種格式的硬解碼,也能和mediamuxer一起使用實現音視頻文件的編輯(結合MediaExtractor),用OpenGL繪制Surface并生成mp4文件,屏幕錄像以及類似Camera app里的錄像功能(雖然這個用MediaRecorder更合適)等
? MediaExtractor用于音視頻分路,和MediaMuxer正好是反過程。MediaFormat用于描述多媒體數據的格式。MediaRecorder用于錄像+壓縮編碼,生成編碼好的文件如mp4, 3gpp,視頻主要是用于錄制Camera preview。MediaPlayer用于播放壓縮編碼后的音視頻文件。AudioRecord用于錄制PCM數據。AudioTrack用于播放PCM數據。PCM即原始音頻采樣數據,可以用如vlc播放器播放。
MediaCodec硬解碼實現RTSP+H264實時視頻播放完整功能可以參考:https://github.com/ldm520/ANDROID_MEDIACODEC_RTSP_H264
【Android 多媒體應用】使用MediaCodec將攝像頭采集的視頻編碼為h264- https://www.cnblogs.com/CoderTian/p/6224605.html
android編碼h264(二):MediaCodec 硬編碼 h264(硬編碼)- https://blog.csdn.net/ss182172633/article/details/50256733 ?https://github.com/sszhangpengfei/MediaCodecEncodeH264
? IDR幀:IDR幀屬于I 幀。解碼器收到IDR frame時,將所有的參考幀隊列丟棄 ,這點是所有I 幀共有的特性,但是收到IDR幀時,解碼器另外需要做的工作就是:把所有的PPS和SPS參數進行更新。由此可見,在編碼器端,每發一個 IDR,就相應地發一個 PPS&SPS_nal_unit
? I幀:幀內編碼幀是一種自帶全部信息的獨立幀,無需參考其它圖像便可獨立進行解碼,視頻序列中的第一個幀始終都是I幀。
? P幀:前向預測編碼幀
? B幀:雙向預測內插編碼幀
> 如果是mp4parser支持的格式就好辦,若不支持就用ffmpeg
使用Android原生的MediaExtractor和MediaMuxer可以實現音視頻的合成。不過有幾個缺點:
1.MediaMuxer是在4.3(API18)中新增的類,無法兼容低版本;
2.音頻如果是MP3的話需要使用MediaCodec重新編碼,因此建議直接使用m4a的音頻文件,可以直接合成;
3.音視頻長度不同時的處理措施。
-- 將H264轉為MP4
?mp4parser- https://github.com/sannies/mp4parser/releases
>?視頻分離和合成(MediaMuxer和MediaExtractor)
Android 視頻分離和合成(MediaMuxer和MediaExtractor)-
https://github.com/RrtoyewxXu/AndroidLiveRecord/tree/master/mediaexactorandmediamuxerdemo
AndroidLiveRecord視頻分離和合成,MediaExtractor和MediaMuxer的Demo- https://github.com/RrtoyewxXu/AndroidLiveRecord/tree/master/mediaexactorandmediamuxerdemo
? 在Android的多媒體類中,MediaMuxer和MediaCodec算是比較年輕的,它們是JB 4.1和JB 4.3才引入的。前者用于將音頻和視頻進行混合生成多媒體文件。缺點是目前只能支持一個
audio track和一個video track,而且僅支持mp4輸出。不過既然是新生事物,相信之后的版本應該會有大的改進。MediaCodec用于將音視頻進行壓縮編碼,它有個比較牛X的地方是可
以對Surface內容進行編碼,如KK 4.4中屏幕錄像功能就是用它實現的。
? MediaExtractor用于音視頻分路,和MediaMuxer正好是反過程。MediaFormat用于描述多媒體數據的格式。MediaRecorder用于錄像+壓縮編碼,生成編碼好的文件如mp4, 3gpp,視頻
主要是用于錄制Camera preview。MediaPlayer用于播放壓縮編碼后的音視頻文件。AudioRecord用于錄制PCM數據。AudioTrack用于播放PCM數據。PCM即原始音頻采樣數據,可以用如
vlc播放器播放。
? MediaExtractor類,可以用來分離容器中的視頻track和音頻track.
> MediaStore
-- MediaStore.ACTION的意圖集合,拍照(圖片),拍音視頻
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));
? ? ? ? ? ? ? startActivityForResult(intent, PHOTOHRAPH);
-- 獲取該圖片的其他信息,比如ID等
String[] projection = {
? ? ? ? ? ? MediaStore.MediaColumns._ID,
? ? ? ? ? ? MediaStore.Images.ImageColumns.ORIENTATION,
? ? ? ? ? ? MediaStore.Images.Media.DATA
? ? ? ? ? ? };
Cursor c = getContentResolver().query(mPhotoUri, projection, null, null, null);
c.moveToFirst();
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); ?
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraVideoURI); ?
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, MAXIMUM_VIDEO_SIZE); ? ? ? ? ? ? ??
startActivityForResult(intent, CAPTURE_VIDEO_INTENT);
String[] projection ={ MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE };?
Cursor cursor = managedQuery(cameraVideoURI, projection, null, null, null);?
int column_index_data =cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);?
int column_index_size =cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);?
cursor.moveToFirst();?
String recordedVideoFilePath = cursor.getString(column_index_data);
int recordedVideoFileSize = cursor.getInt(column_index_size);
> VideoView與MediaController播放視頻
通過VideoView+MediaController實現視頻播放- https://blog.csdn.net/qq_34078119/article/details/56560571
VideoView+MediaController自定義seekbar和全屏切換功能
定制VideoView,自定義MediaController- https://blog.csdn.net/jason_xnxm/article/details/31398939
> MediaPlayer與MediaController播放視頻(有Bug),這個需要MediaPlayer+seekBar來播放視頻
Android中使用SurfaceView+MediaPlayer+自定義的MediaController實現自定義的視屏播放器- https://www.cnblogs.com/wjtaigwh/p/4960301.html
MediaPlayer MediaController- https://blog.csdn.net/guchuanhang/article/details/50754623
> MediaInfo
? MediaInfo 用來分析視頻和音頻文件的編碼和內容信息,是一款是自由軟件 (免費使用、免費獲得源代碼)。他除了提供DLL之外,本身也提供GUI工具用于查看視頻信息。新版本的MediaInfo支持HEVC。MediaInfo中解碼JPEG信息。
?-- 使用MediaInfo可以獲得多媒體文件的哪些信息?
? 內容信息:標題,作者,專輯名,音軌號,日期,總時間……
? 視頻:編碼器,長寬比,幀頻率,比特率……
? 音頻:編碼器,采樣率,聲道數,語言,比特率……
? 文本:語言和字幕
? 段落:段落數,列表
?-- MediaInfo支持哪些文件格式?
? 視頻:MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG-1, MPEG-2, MPEG-4, DVD (VOB)...
? (編碼器:DivX, XviD, MSMPEG4, ASP, H.264, AVC...)
? 音頻:OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF...
? 字幕:SRT, SSA, ASS, SAMI...
?-- MediaInfo的主要功能特點:
? 支持眾多視頻和音頻文件格式
? 多種查看方式:文本,表格,樹形圖,網頁……
? 自定義查看方式
? 信息導出:文本,CSV,HTML……
? 三種發布版本:圖形界面,命令行,DLL(動態鏈接庫)
? 與Windows資源管理器整合:拖放,右鍵菜單
國際化:有多種界面語言供選擇.
MediaInfo 用來分析視頻和音頻文件的編碼和內容信息,是一款是自由軟件 (免費使用、免費獲得源代碼)。
? SDL庫的作用是封裝了復雜的視音頻底層操作,簡化了視音頻處理的難度。SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以開發出跨多個平臺(Linux、Windows、Mac OS X等)的應用軟件。目前SDL多用于開發游戲、模擬器、媒體播放器等多媒體應用領域。
? 3D視覺原理之深度暗示(即立體感)主要有兩種:心理深度暗示和生理深度暗示。心理深度暗示主要由平時的經驗積累獲得。即使用單眼觀看也會使人有3D效果。生理深度暗示包括單眼立體視覺暗示和雙眼立體視覺暗示。 單眼立體視覺暗示包括有兩種:焦點調節和單眼移動視差。雙眼立體視覺暗示主要利用的是人的兩眼在觀察同一物體的時候成像的不同來獲得物體的前后關系。由于左眼看到物體的左邊多一點,右眼看到的物體右邊多一點,因而形成了視覺上的差異,即雙目視差(如圖所示)。雙目視差是獲得深度信息的生理基礎。當前的3D系統基本上采用的都是該原理進行成像。換句話說,就是分別讓左眼和右眼在同一時間看到不同的圖像。
? 3D顯示技術:分別讓左眼和右眼在同一時間看到不同的圖像。紅藍3D。偏振光3D。快門3D。
> 視頻編解碼
-- 壓縮視頻:FFmpeg 和 libx264,libx264 是一個開源的H.264編碼器。視頻壓縮編碼和音頻壓縮編碼。
編碼器(encoder):x264(視頻編碼) 和 aac(音頻編碼)
解碼器:播放器
-- 最常見的MPEG4P2編碼器有divx和xvid(開源),最常見的AVC編碼器是x264(開源);
比較流行的幾種適合網絡傳輸的視頻編碼有:MPEG4、H263、H264;
? MediaExtractor:可用于分離視頻文件的音軌和視頻軌道,如果你只想要視頻,那么用selectTrack方法選中視頻軌道,然后用readSampleData讀出數據,這樣你就得到了一個沒有聲音的視頻。此處我們傳入的是一個音頻文件(mp3),所以也就只有一個軌道,音頻軌道。
Android用MediaRecorder實現MPEG4視頻監控- http://tuojian-tj.iteye.com/blog/973995
文章【Android 的視頻編碼 H263 MP4V H264】的代碼實現- http://blog.csdn.net/zblue78/article/details/6083374
直接傳視頻流,MPEG4或者H.264格式。視頻的錄制和壓縮上傳等;android目前解決視頻的剪切和壓縮的話好像就只能是用FFMEG。
> 視頻壓縮與分析
視頻的采集,視頻的編輯,視頻的截圖,視頻的水印等
網絡自適應動態視頻解碼技術,基于Android的視頻流自適應算法設計,mpeg4壓縮協議。
視頻壓縮編碼和音頻壓縮編碼的基本原理- http://blog.csdn.net/mabeijianxi/article/details/72933910
Android 視頻壓縮等- http://androidwarzone.blogspot.jp/2011/12/ffmpeg4android.html?
利用FFmpeg玩轉Android視頻錄制與壓縮(二)<轉>- https://www.cnblogs.com/wainiwann/p/7222672.html
> 多媒體流的幾個環節:采集,編碼,推流,轉碼,分發,拉流,解碼和渲染。
??
> 音視頻的錄制、播放、編碼、上傳、下載、觀看等,視頻編解碼,音頻編解碼,線音頻播放 音視頻同步等,軟硬編碼解碼
仿網易云音樂 安卓版-- https://github.com/aa112901/remusic
Android本地視頻播放器開發- http://blog.csdn.net/jwzhangjie/article/category/953509
Android本地視頻播放器開發--NDK編譯FFmpeg- http://blog.csdn.net/jwzhangjie/article/details/9038111
視頻播放Demo -http://blog.csdn.net/itachi85/article/details/7216962 ,http://blog.csdn.net/x605940745/article/details/18302111
> 視頻實時上傳
? 現在有個場景是錄制視頻是一直在錄的,有個拍照的功能,怎么取到實時預覽的那一幀呢?Camera有previewlistener,設置監聽器,在onFrame中可以接受到每一幀的數據。
Android 實時視頻采集/編碼/傳輸/解碼/播放—方案調研-http://blog.csdn.net/sinat_35845281/article/details/52794344
android 在線視頻邊下邊播-http://download.csdn.net/download/lin415005334/8855367
android 視頻播放(一)利用android原生的videoview- http://blog.csdn.net/shenxiaolei507/article/details/41046345
android視頻播放(二) 利用android原生的MediaPlayer+SurfaceView- http://blog.csdn.net/shenxiaolei507/article/details/41349295
Android使用SurfaceView播放視頻時橫豎屏的調整 - http://blog.chinaunix.net/uid-20771867-id-4171565.h
屏的調整 -https://github.com/Chaoba/BlueVideoPlayer
支持橫豎屏切換的視頻播放器demo(IOS)- http://download.csdn.net/download/yqxh_wang/8950747
android_橫豎屏切換demo- http://download.csdn.net/download/agan75/6033923
android 視頻播放 點擊橫豎屏切換 自動旋轉橫豎屏切換 沖突- http://download.csdn.net/download/liubo080852/8446445
Android網頁播放視頻(含橫豎屏切換)DEMO(實測有效)- http://download.csdn.net/detail/nuobabijie730/9780160
Android實現實時視頻通話- http://blog.csdn.net/wintersweetforever/article/details/78478939
Android實現實時視頻通話- https://github.com/LinHuanTanLy/JustTalkMaster
通過 H264編解碼,rtp協議傳輸 實現內網之間點對點實時視頻通信- https://github.com/592713711/Android-VideoChat
? Android實現視頻播放的話,有2中方式,第一種是MediaPlayer+surfaceView實現,第二種是直接用VideoView來實現,當然市面上也有一些主流的視頻能播放的框架,像Vitamio,ExoPlayer等。
Android三種播放視頻的方式- http://blog.csdn.net/itachi85/article/details/7216962
Android 利用發送Intent播放本地視頻和網絡視頻- http://blog.csdn.net/dj0379/article/details/50915770
> 短視頻,,視頻的采集,視頻的編輯,視頻的截圖,視頻的水印等
利用FFmpeg視頻錄制微信小視頻與其壓縮處理- https://github.com/mabeijianxi/small-video-record
“抖音”式的酷炫短視頻開發進階- http://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/79124926
基于VCamera,仿微信錄制短視頻- https://github.com/maimingliang/WxRecoderVideo
Android仿微信朋友圈10s視頻編輯- http://blog.csdn.net/qq_28284547/article/details/78295362
> 實時視頻通話 ;實時視頻聊天 ;實時音視頻聊天
1.android使用socket實現實時視頻?
2.用MediaRecorder對yuv420進行H264硬編碼后發送?
3.調用本地H264編碼庫(JNI)對一幀YUV420數據編碼后發送?
4.對SIP協議、H.264視頻編解碼、RTC/RTCP網絡傳輸等關鍵技術進行研究?
> 音視頻邊下邊播
不管是Google的 ExoPlayer、B站的 ijkplayer
mediaplayer便實現了邊下邊播的功能- https://github.com/Clearlee/PlayWhileDownloadMusic
通常實現流媒體的方法大致有三種:
?一,講音視頻文件拆分成若干多個小文件,在播放時,逐個下載,然后播放。也叫偽流媒體。
?二,將視頻通過轉換軟件,在服務器端轉換成流媒體格式文件,然后客戶端進行播放。
?三,在本地錄制視頻的過程中,直接編解碼為流媒體格式文件。
-- 用MediaMuxer與AudioRecord與MediaCodec及Surface進行屏幕錄制成gif。
MediaProjection實現手機截屏(無須root),可以通過MediaProjection+VirturalDisplay+MediaProjectionManager來實現截屏。
一個音視頻文件是由音頻和視頻組成的;我們可以通過MediaExtractor、MediaMuxer把音頻或視頻給單獨抽取出來;抽取出來的音頻和視頻能單獨播放;音軌
Android獲取視頻音頻的時長的方法- http://blog.csdn.net/cwg19910909/article/details/50482807
實現把一個音頻文件的視頻抽取出來- http://blog.csdn.net/zhang_jun_ling/article/details/52770532
Java JAVE處理視頻 、音頻文件(讀取視頻時長等) - http://blog.csdn.net/jerome_s/article/details/54348124
利用Android SDK提供的MediaExtractor和MediaMuxer類來完成mp4文件的提取和生成 https://github.com/Jhuster/Android/tree/master/MediaDemo
總結
以上是生活随笔為你收集整理的Android音视频API - MediaCodec/MediaMuxer/MediaStore/MediaController等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日常使用计算机过程中遇到,计算机日常使用
- 下一篇: GeoJSON初探