国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

音視頻開發(fā)系列(6)——全面了解Android MediaFormat

這篇具有很好參考價(jià)值的文章主要介紹了音視頻開發(fā)系列(6)——全面了解Android MediaFormat。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

MediaFormat 是 Android 平臺(tái)中用于描述音視頻格式的類,它提供了許多 API 用于設(shè)置和獲取音視頻的格式信息。以下是 MediaFormat 類的主要 API:

createAudioFormat 和 createVideoFormat

用于創(chuàng)建音頻和視頻格式的 MediaFormat 對(duì)象。需要指定媒體類型(例如 audio/mp4a-latm 或 video/avc)、媒體的采樣率、通道數(shù)、碼率、幀率等信息。

MediaFormat audioFormat = MediaFormat.createAudioFormat("audio/mp4a-latm", 44100, 2);
MediaFormat videoFormat = MediaFormat.createVideoFormat("video/avc", 1920, 1080);

setInteger 和 getInteger

用于設(shè)置和獲取整數(shù)類型的屬性值,例如音頻的比特率、視頻的幀率等。其中 setInteger 方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)為屬性名稱(例如 MediaFormat.KEY_BIT_RATE),第二個(gè)參數(shù)為屬性值。getInteger 方法接收一個(gè)參數(shù),即要獲取的屬性名稱,返回對(duì)應(yīng)的整數(shù)值。

getInteger常見的屬性如下:

KEY_BIT_RATE:音頻或視頻的比特率,單位為比特每秒(bps)。

KEY_SAMPLE_RATE:音頻的采樣率,單位為赫茲(Hz)。

KEY_CHANNEL_COUNT:音頻的通道數(shù)。

KEY_WIDTH:視頻的寬度,單位為像素。

KEY_HEIGHT:視頻的高度,單位為像素。

KEY_FRAME_RATE:視頻的幀率,單位為幀每秒(fps)。

KEY_I_FRAME_INTERVAL:視頻的 I 幀間隔,單位為秒。通常情況下,視頻編碼器會(huì)在視頻中周期性地插入一個(gè) I 幀,以便于視頻的隨機(jī)訪問(wèn)。該屬性指定 I 幀之間的時(shí)間間隔,如果值為 1,則表示每一幀都是 I 幀,如果值為 2,則表示每?jī)蓭瑸橐粋€(gè) GOP(Group Of Pictures),第一幀為 I 幀,后續(xù)幀為 P 幀或 B 幀。

如果MediaFormat.KEY_I_FRAME_INTERVAL的返回值是-1,則表示編碼器使用了默認(rèn)值。

在Android中,如果使用MediaCodec進(jìn)行視頻編碼,可以設(shè)置MediaFormat.KEY_I_FRAME_INTERVAL參數(shù)來(lái)控制生成關(guān)鍵幀的頻率。如果您沒(méi)有顯式地設(shè)置此參數(shù)或設(shè)置為-1,則編碼器將使用默認(rèn)值,這通常是10秒左右的時(shí)間間隔。

需要注意的是,不同的視頻編碼器可能會(huì)對(duì)默認(rèn)值進(jìn)行不同的設(shè)置。因此,如果您需要更精細(xì)地控制關(guān)鍵幀的生成頻率,最好顯式地設(shè)置MediaFormat.KEY_I_FRAME_INTERVAL參數(shù),而不是依賴默認(rèn)值。

KEY_MAX_INPUT_SIZE:媒體輸入數(shù)據(jù)的最大大小,單位為字節(jié)。通常情況下,編碼器需要知道輸入數(shù)據(jù)的最大大小,以便于為輸入數(shù)據(jù)分配足夠的緩沖區(qū)。

int bitRate = mediaFormat.getInteger(MediaFormat.KEY_BIT_RATE);
int sampleRate = mediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);
int channelCount = mediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT);
int width = mediaFormat.getInteger(MediaFormat.KEY_WIDTH);
int height = mediaFormat.getInteger(MediaFormat.KEY_HEIGHT);
float frameRate = mediaFormat.getInteger(MediaFormat.KEY_FRAME_RATE);
float iFrameInterval = mediaFormat.getInteger(MediaFormat.KEY_I_FRAME_INTERVAL);
int maxInputSize = mediaFormat.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE);

setString 和 getString

用于設(shè)置和獲取字符串類型的屬性值,例如音頻的 MIME 類型、視頻的顏色空間等。其中 setString 方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)為屬性名稱,第二個(gè)參數(shù)為屬性值。getString 方法接收一個(gè)參數(shù),即要獲取的屬性名稱,返回對(duì)應(yīng)的字符串值。

audioFormat.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
videoFormat.setString(MediaFormat.KEY_COLOR_SPACE, "bt709");
String mimeType = audioFormat.getString(MediaFormat.KEY_MIME);

getString常見的屬性如下:

KEY_MIME:媒體格式的 MIME 類型。MIME(Multipurpose Internet Mail Extensions)類型是一種標(biāo)準(zhǔn)化的方式,用于表示不同類型的數(shù)據(jù)格式。例如,視頻格式的 MIME 類型可能為 video/mp4,音頻格式的 MIME 類型可能為 audio/mpeg。

KEY_LANGUAGE:媒體的語(yǔ)言。

KEY_TITLE:媒體的標(biāo)題。

KEY_ALBUM:媒體所屬的專輯。

KEY_AUTHOR:媒體的作者。

KEY_GENRE:媒體的流派或類型。

KEY_MIME_TYPE:同 KEY_MIME。

String mime = mediaFormat.getString(MediaFormat.KEY_MIME);
String language = mediaFormat.getString(MediaFormat.KEY_LANGUAGE);
String title = mediaFormat.getString(MediaFormat.KEY_TITLE);
String album = mediaFormat.getString(MediaFormat.KEY_ALBUM);
String author = mediaFormat.getString(MediaFormat.KEY_AUTHOR);
String genre = mediaFormat.getString(MediaFormat.KEY_GENRE);

setByteBuffer和getByteBuffer

用于設(shè)置和獲取ByteBuffer類型的數(shù)據(jù)。具體介紹如下:

setByteBuffer(String key, ByteBuffer bytes)
setByteBuffer方法用于設(shè)置指定鍵值對(duì)應(yīng)的ByteBuffer類型數(shù)據(jù)。其中,key表示鍵名,bytes表示要設(shè)置的ByteBuffer類型數(shù)據(jù)。該方法可以用于設(shè)置音頻或視頻數(shù)據(jù)的具體內(nèi)容。例如,可以使用該方法將PCM音頻數(shù)據(jù)或H.264視頻數(shù)據(jù)設(shè)置到MediaFormat對(duì)象中。

getByteBuffer(String key)
getByteBuffer方法用于獲取指定鍵值對(duì)應(yīng)的ByteBuffer類型數(shù)據(jù)。其中,key表示鍵名。該方法可以用于獲取音頻或視頻數(shù)據(jù)的具體內(nèi)容。例如,可以使用該方法獲取AAC音頻數(shù)據(jù)或H.264視頻數(shù)據(jù)。

需要注意的是,使用setByteBuffer和getByteBuffer方法時(shí)需要保證媒體格式已經(jīng)被正確設(shè)置,否則可能會(huì)導(dǎo)致數(shù)據(jù)無(wú)法被正確解析。此外,對(duì)于視頻數(shù)據(jù),由于H.264和HEVC等視頻編碼格式采用了一些特殊的編碼方式,因此需要通過(guò)特定的方式將視頻數(shù)據(jù)封裝成封裝格式,例如MP4或MKV等格式。

MediaFormat中的csd-0和csd-1分別是什么意思

在 Android 的 MediaFormat 類中,csd-0 和 csd-1 分別代表 H.264 和 H.265 編碼器中的 SPS(Sequence Parameter Set)和 PPS(Picture Parameter Set)數(shù)據(jù)。

具體來(lái)說(shuō),H.264 和 H.265 編碼器在編碼視頻數(shù)據(jù)時(shí),會(huì)將視頻幀數(shù)據(jù)分為多個(gè) NAL(Network Abstraction Layer)單元,并在每個(gè) NAL 前面添加特定的起始碼(start code)或者長(zhǎng)度信息(length information)。SPS 和 PPS 分別是 H.264 和 H.265 編碼器中的兩個(gè)關(guān)鍵信息單元,包含了視頻的基本參數(shù)信息(如分辨率、幀率、碼率等)以及編碼參數(shù)(如編碼方式、壓縮比等),是解碼器解碼視頻時(shí)必須用到的信息。

在 MediaFormat 中,csd-0 和 csd-1 分別對(duì)應(yīng) H.264 和 H.265 編碼器中的 SPS 和 PPS 數(shù)據(jù),是作為 MediaFormat 對(duì)象中的附加參數(shù)來(lái)描述視頻流的。當(dāng)使用 MediaCodec 對(duì)象進(jìn)行編碼或解碼時(shí),需要將這些附加參數(shù)設(shè)置到 MediaFormat 對(duì)象中,以便編碼器或解碼器使用。

需要注意的是,由于不同的編碼器可能使用不同的起始碼或長(zhǎng)度信息格式,因此在解析 SPS 和 PPS 數(shù)據(jù)時(shí)需要根據(jù)編碼器的具體實(shí)現(xiàn)來(lái)進(jìn)行解析。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429848.html

到了這里,關(guān)于音視頻開發(fā)系列(6)——全面了解Android MediaFormat的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android 音視頻開發(fā) - VideoView

    本篇文章主要介紹下Android 中的VideoView. VideoView是一個(gè)用于播放視頻的視圖組件,可以方便地在應(yīng)用程序中播放本地或網(wǎng)絡(luò)上的視頻文件。 VideoView可以直接在布局文件中使用,也可以在代碼中動(dòng)態(tài)創(chuàng)建。 它封裝了MediaPlayer和SurfaceView,提供了簡(jiǎn)單的接口來(lái)控制視頻的播放和顯示

    2024年04月08日
    瀏覽(28)
  • 音視頻開發(fā)-ffmpeg介紹-系列一

    音視頻開發(fā)-ffmpeg介紹-系列一

    目錄 一.簡(jiǎn)介 FFmpeg框架的基本組成包含: 二.?FFmpeg框架梳理音視頻的流程?編輯 基本概念: 三.ffmpeg、ffplay、ffprobe區(qū)別 ? ? ?4.1 ffmpeg是用于轉(zhuǎn)碼的應(yīng)用程序? 4.2?fffplay是用于播放的應(yīng)用程序? ? ? ?4.3?ffprobe是用于查看文件格式的應(yīng)用程序 ? ? ?4.4?ffmpeg是用于轉(zhuǎn)碼的應(yīng)用程

    2024年02月16日
    瀏覽(30)
  • Android音視頻開發(fā) - MediaMetadataRetriever 相關(guān)

    MediaMetadataRetriever 是android中用于從媒體文件中提取元數(shù)據(jù)新的類. 可以獲取音頻,視頻和圖像文件的各種信息,如時(shí)長(zhǎng),標(biāo)題,封面等. 需要申請(qǐng) 讀寫權(quán)限 . 這里我使用的是本地路徑, 需要注意的是如果路徑文件不存在,會(huì)拋出 IllegalArgumentException,具體的源碼如下: 根據(jù)keyCode返回keyC

    2024年04月08日
    瀏覽(31)
  • Android修行手冊(cè)-基礎(chǔ)優(yōu)化系列圖片篇,ios音視頻面試內(nèi)容

    Android修行手冊(cè)-基礎(chǔ)優(yōu)化系列圖片篇,ios音視頻面試內(nèi)容

    圖片款=(480/480)*400=400 占用內(nèi)存為300*400*4=480000 那么它占用內(nèi)存為什么是變化的? Android會(huì)先解析圖片文件本身的數(shù)據(jù)格式,然后還原成Bitmap對(duì)象,Bitmap的大小就跟上面的計(jì)算方式相關(guān)聯(lián)。 再舉例1080*452的png圖片,圖片占用存儲(chǔ)空間大小為56kb,內(nèi)存如圖: 上圖一目了然,不

    2024年04月27日
    瀏覽(45)
  • Android音視頻開發(fā)實(shí)戰(zhàn)02-Jni

    Android音視頻開發(fā)實(shí)戰(zhàn)02-Jni

    JNI是Java Native Interface的縮寫,是Java提供的一種機(jī)制,用于在Java代碼中調(diào)用本地(C/C++)代碼。它允許Java代碼與本地代碼進(jìn)行交互,通過(guò)JNI,Java應(yīng)用程序可以調(diào)用一些原生庫(kù)或者操作系統(tǒng)API,以獲取更好的性能和更強(qiáng)的功能支持。 使用JNI需要編寫一些Native方法,并將其實(shí)現(xiàn)在

    2024年02月11日
    瀏覽(30)
  • Android音視頻開發(fā)實(shí)戰(zhàn)01-環(huán)境搭建

    Android音視頻開發(fā)實(shí)戰(zhàn)01-環(huán)境搭建

    FFmpeg 是一款流行的開源多媒體處理工具,它可以用于轉(zhuǎn)換、編輯、錄制和流式傳輸音視頻文件。FFmpeg 具有廣泛的應(yīng)用場(chǎng)景,包括視頻編解碼、格式轉(zhuǎn)換、裁剪、合并、濾鏡等等。官網(wǎng):https://ffmpeg.org/ FFmpeg 支持各種常見的音視頻格式,例如 MP4、AVI、FLV、MOV、AAC、MP3、M4A 等等

    2024年02月10日
    瀏覽(22)
  • Android 音視頻開發(fā)—MediaPlayer音頻與視頻的播放介紹

    Android 音視頻開發(fā)—MediaPlayer音頻與視頻的播放介紹

    Android多媒體中的——MediaPlayer,我們可以通過(guò)這個(gè)API來(lái)播放音頻和視頻該類是Androd多媒體框架中的一個(gè)重要組件,通過(guò)該類,我們可以以最小的步驟來(lái)獲取,解碼和播放音視頻。 它支持三種不同的媒體來(lái)源: 本地資源 內(nèi)部的URI,比如你可以通過(guò)ContentResolver來(lái)獲取 外部URL(流

    2024年02月10日
    瀏覽(27)
  • Android-音視頻學(xué)習(xí)系列-(二)-交叉編譯動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的入門學(xué)習(xí)

    Android-音視頻學(xué)習(xí)系列-(二)-交叉編譯動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的入門學(xué)習(xí)

    gcc -S test.i -o test.s//-S 的作用是編譯結(jié)束生成匯編文件。 匯編階段 匯編階段把 .S 文件翻譯成二進(jìn)制機(jī)器指令文件 .o ,這個(gè)階段接收.c ,.i ,.s 的文件都沒(méi)有問(wèn)題。 下面我們通過(guò)以下命令生成二進(jìn)制機(jī)器指令文件 .o 文件: gcc -c test.s -o test.o 鏈接階段 鏈接階段,鏈接的是函數(shù)庫(kù)。

    2024年04月09日
    瀏覽(26)
  • 音視頻開發(fā)系列(10):基于qt的音頻推流

    音視頻開發(fā)系列(10):基于qt的音頻推流

    今天分享一下利用qt錄制音頻,然后再利用ffmpeg推流到nginx服務(wù)器,最后再利用vlc進(jìn)行拉流的demo。 首先介紹一下如何利用qt來(lái)進(jìn)行音頻的錄制,qt的音頻錄制主要利用qt的QAudioFormat先進(jìn)行音頻信息的配置。主要需要配置以下的信息: 然后使用QAudioDeviceInfo來(lái)獲取是否支持改設(shè)置

    2024年02月02日
    瀏覽(25)
  • Android開源計(jì)劃-一周開發(fā)app,webrtc音視頻開發(fā)

    Android開源計(jì)劃-一周開發(fā)app,webrtc音視頻開發(fā)

    題目 – 一周開發(fā)app計(jì)劃 首批參與成員 -小巫 -墨香 -夢(mèng)痕 -邊城刀客 -徐cc 要求 – -每位認(rèn)領(lǐng)者按照開源規(guī)范來(lái)做,代碼規(guī)范和Android開發(fā)規(guī)范 -每位認(rèn)領(lǐng)者必須擁有g(shù)ithub賬號(hào),熟練使用git對(duì)代碼進(jìn)來(lái)管理 -每個(gè)人認(rèn)領(lǐng)一個(gè)功能點(diǎn)或模塊 -提出完善的解決方案并提供封裝良好的庫(kù)

    2024年04月08日
    瀏覽(90)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包