日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android MediaMuxer合成视频文件

發布時間:2023/12/8 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android MediaMuxer合成视频文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
相關筆記: Android MediaCodec簡單總結_丞恤猿的博客-CSDN博客 Android使用MediaCodec進行視頻編碼 & 視頻的一些基礎概念介紹_丞恤猿的博客-CSDN博客 Android用AudioRecord+MediaCodec采集音頻和音頻編碼 & 音頻一些基本概念_丞恤猿的博客-CSDN博客 #.簡介 MediaMuxer在Android中可以將編碼后的視頻、音頻數據封裝后輸出為多媒體文件,支持的文件輸出格式包括MP4,webm和3gp。不過MediaMuxer中最多只能添加一條視軌和一條音軌。 一般音視頻編碼由MediaCodec負責,而MediaMuxer處理MediaCodec輸出的編碼數據,合成多媒體文件。 #主要API 1.public MediaMuxer(@NonNull String path, @Format int format) 設置輸出文件路徑 和 輸出文件的媒體格式 2.addTrack(mediaFormat) 添加多媒體軌道。 在MediaCodec獲取輸出緩沖區索引bufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED時,可以去獲取MediaCodec輸出的媒體格式:MediaFormat mediaFormat = mEncoder.getOutputFormat(); 并為MediaMuxer添加對應媒體格式的軌道。 3.start() 開啟混合器 4.writeSampleData(int trackIndex, ByteBuffer byteBuf, BufferInfo bufferInfo) 處理媒體數據,三個參數依次為:軌道號、數據緩沖區、緩沖區配置信息。 后兩者可以從MediaCodec的輸出緩沖數據獲取到。 5.stop() 關閉混合器 6.release() 釋放實例和對應資源 #處理音視頻數據代碼示例: 其實就是不停調用writeSampleData(int trackIndex, ByteBuffer byteBuf, BufferInfo bufferInfo)來處理MeidaCodec輸出的編碼數據。 (這里為MediaCodec的輸出數據自定義了一個封裝類,以下audio、video都是該封裝類對象) if (null != audio) {ByteBuffer buffer = ByteBuffer.wrap(audio.data);MediaCodec.BufferInfo info = audio.info;//若對應幀包含的是編碼器控制信息,則合成器不需要處理if ((info.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {buffer = null;}if (null != buffer && info.size > 0) {buffer.position(info.offset);buffer.limit(info.offset + info.size);try {mMuxer.writeSampleData(mAudioTrack, buffer, info);} catch (Exception e) {//.......進行相關處理........}} }if (null != video) {ByteBuffer buffer = ByteBuffer.wrap(video.data);MediaCodec.BufferInfo info = video.info;//若對應幀包含的是編碼器控制信息,則合成器不需要處理if ((info.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {buffer = null;}if (null != buffer && info.size > 0) {buffer.position(info.offset);buffer.limit(info.offset + info.size);try {mMuxer.writeSampleData(mVideoTrack, buffer, info);} catch (Exception e) {//.......進行相關處理........}} }

總結

以上是生活随笔為你收集整理的Android MediaMuxer合成视频文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。