音視頻面試題集錦

下面是音視頻開發面試題精選:

  • 1、談談 iOS 音視頻采集相關接口和數據結構的設計?
  • 2、如何降低處理音視頻鏈路中的內存峰值?
  • 3、OpenGL 如何實現二分屏效果?
  • 4、使用 OpenGL 繪制時對于二維坐標需要注意什么?

1、談談 iOS 音視頻采集相關接口和數據結構的設計?

1)整體框架

通常我們通過 AVCaptureSession 相關的 API 來進行音視頻的采集,其中主要組件分為 Input、Output、Session 幾個部分:

  • Input:AVCaptureDeviceInput,以 Device 作為輸入,分為:視頻采集設備、音頻采集設備,可以同時添加多個 Input。
  • Output:可以指定圖片、視頻文件、音視頻裸幀數據等作為輸出,可以同時添加多個 Output。
    • kCVPixelFormatType_32BGRA
    • kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange(nv12 420v)
    • kCVPixelFormatType_420YpCbCr8BiPlanarFullRange(nv12 420f)
    • AVCaptureStillImageOutput 圖片
    • AVCaptureMovieFileOutput 視頻文件
    • AVCaptureAudioDataOutput 音頻裸幀
    • AVCaptureVideoDataOutput 視頻裸幀,目前支持三種格式的輸出:
  • AVCaptureSession 主要負責管理各個 Input、Output 以及它們的內部鏈路組合。

可以通過如下代碼獲取視頻輸出支持的格式:

AVCaptureVideoDataOutput *videoOut = [[AVCaptureVideoDataOutput alloc] init];
NSArray<NSNumber *> *types = [videoOut availableVideoCVPixelFormatTypes];
NSLog(@"type count: %ld", types.count); // 3 種
for (NSNumber *type in types) {NSLog(@"type: %@", type);
}

2)視頻采集

對于視頻采集,一般直接使用 AVCaptureSession 的 API 即可,需要注意的是:相機(前后置一樣)吐出的視頻幀,默認是橫屏模式的 (橫屏,Home 鍵在右邊,也就是順時針旋轉 90 度就變成 Home 鍵在下邊的正常豎屏狀態),跟 Android 略有差異。

視頻采集時會有一個 10 多幀的緩存,當我們沒有及時歸還相機吐出的視頻幀,導致采集吐幀的這個緩存空了,就會導致相機不吐幀。

3)音頻采集

對于音頻采集,除了可以使用 AVCaptureSession 來進行音頻采集外,還可以使用 AudioUnit。

使用 AVCaptureSession 可以和視頻采集在一起處理,也可以單獨創建新的 AVCaptureSession 進行音頻采集。

  • 優點:由系統根據 AVAudioSession 自動處理音頻采集的開始和暫停,也就是系統中斷不用做特殊處理。
  • 缺點:沒有辦法設置音頻采樣格式,所以在線路切換時,比如:從正常揚聲器切到藍牙耳機,采樣率可能會發生變化,這是就要進行重采樣,是采樣率保持一致。

使用 AudioUnit 音頻采集:

  • 優點:更底層,更高效;在創建 unit 后,可以直接設置音頻采集格式(如:通道數等)。
  • 缺點:需要自己處理音頻中斷等情況。

2、如何降低處理音視頻鏈路中的內存峰值?

音視頻處理鏈路中的內存峰值一般是視頻數據導致的,要降低內存峰值一般可以從兩個方面入手:

  • 降低采集參數:
    • 降低采集視頻分辨率
    • 降低采集視頻幀率
  • 降低并發任務數量:
    • 將任務分優先級,按照優先級串行執行,這樣既能降低內存峰值,也會降低 CPU 峰值

3、OpenGL 如何實現二分屏效果?

以紋理 y 坐標中間分屏為例,代碼如下:


precision highp float;
varying lowp vec2 varyTextCoord;
uniform sampler2D inputTexture;void main()
{float y;if (varyTextCoord.y >= 0.0 && varyTextCoord.y <= 0.5) {y = varyTextCoord.y + 0.25;} else {y = varyTextCoord.y - 0.25;}gl_FragColor = texture2D(inputTexture, vec2(varyTextCoord.x, y));
}

4、使用 OpenGL 繪制時對于二維坐標需要注意什么?

1)搞清楚頂點坐標與紋理坐標

  • 頂點坐標是左下角是 (-1, -1),右上角是 (1, 1);
  • 紋理坐標是左下角是 (0, 0),右上角是 (1, 1),也就是 (0, 0) 對應圖片的左下角,(1, 1) 對應著圖片的右上角;
  • 頂點坐標與紋理坐標一一對應,默認設置的紋理坐標是平鋪滿整個頂點坐標的,所以在設置 fill、fit 模式時,只用設置頂點坐標即可。

GLfloat vertexes[] =
{-1.0, -1.0, //左下1.0, -1.0,  //右下-1.0, 1.0,  //左上1.0, 1.0    //右上
};GLfloat textures[] = {0.0f, 0.0f, //左下1.0f, 0.0f, //右下0.0f, 1.0f, //左上1.0f, 1.0f  //右上
};

2)FBO 與 glViewport

首先繪制前 FBO 需要綁定了一個尺寸一致的 texture,繪制的內容會被繪制到這張 texture 上,這個就是 RTT,如果 FBO 為 0 則是屏幕繪制,否則是離屏繪制,可以將 FBO 看作畫板,texture 看做這張畫布。

一般我們會將 viewport 設置為: (0, 0, FBO.width, FBO.height),這樣繪制會占滿整個 FBO,而頂點的的4個頂點是與 viewport 的4個頂點一一對應的,當然紋理也是一樣對應的。

viewport 的 frame 和 FBO 不一致時,就會只在 viewport 的那塊區域進行繪制對應的內容,也就是將輸入的紋理在 viewport 的 frame 上進行繪制。

粉絲福利, 免費領取C++音視頻學習資料包+學習路線大綱、技術視頻/代碼,內容包括(音視頻開發,面試題,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,編解碼,推拉流,srs)↓↓↓↓↓↓見下面↓↓文章底部點擊免費領取↓↓

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697550.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697550.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697550.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue中如何使用dayjs

Day.js中文網Day.js是一個極簡的JavaScript庫&#xff0c;可以為現代瀏覽器解析、驗證、操作和顯示日期和時間。https://dayjs.fenxianglu.cn/ 單位不區別大小寫&#xff0c;支持復數和縮寫形式 單位縮寫描述 date D日期 [1,31]dayd星期 [0,6]&#xff08;星期日0&#xff0c…

云計算面試題【后期】

前言&#xff1a; 隨著年齡的增長生活瑣碎的事情、煩心的事情日漸增多&#xff0c;怠慢了更新&#xff0c; 1.什么是數據庫 DB.DataBase 數據庫&#xff1a; 依照某種數據模型進行組織并存放到存儲器的數據集合 DBMS.DataBase Management System – 數據庫管理系統&#xff1a;…

Java MP3轉PCM

Java MP3轉PCM 1 添加依賴2 Java 代碼 1 添加依賴 <dependency><groupId>com.googlecode.soundlibs</groupId><artifactId>mp3spi</artifactId><version>1.9.5.4</version> </dependency>2 Java 代碼 package com.xu.music.…

迪蕭科技有限公司邀您參觀2024生物發酵展

參展企業介紹 浙江迪蕭科技有限公司位于浙江杭州&#xff0c;是一家專注于膜技術的國家高新企業。公司針對食品飲料、醫藥保健等領域的過程分離與控制、產品提取及濃縮、廢料資源化利用等提供全方案解決服務。堅持以“顧客至上、優質服務、卓越品質”為原則。為客戶企業提供清…

視頻批量瘦身:一鍵縮小尺寸,輕松處理海量視頻

在如今視頻內容爆炸的時代&#xff0c;無論是個人創作者還是企業團隊&#xff0c;都面臨著處理大量視頻的需求。而視頻尺寸過大往往會導致上傳緩慢、存儲空間不足等問題。為了解決這個問題&#xff0c;我們推出了一款強大的視頻批量剪輯工具&#xff0c;讓你輕松實現視頻尺寸批…

NXP實戰筆記(七):S32K3xx基于RTD-SDK在S32DS上配置ICU輸入捕獲

目錄 1、概述 2、輸入捕獲SDK配置 2.1、SAIC中斷方式 2.2、IPWM或者IPM 1、概述 輸入捕獲&#xff0c;可以抓取高電平時間、低電平時間、占空比、周期、邊沿檢測與回調函數、邊沿計數&#xff08;ABZ解碼&#xff09;、時間戳、喚醒中斷。 記錄一下根據Emios模塊實現上述部分…

Spring Cache框架使用教程,通過簡單且強大的方式在應用程序中使用緩存提高性能

Spring Cache Spring Cache 框架是 Spring 框架的一部分,它提供了一種簡單但功能強大的方式來在應用程序中實現緩存。下面是 Spring Cache 框架的一些好處: 性能提升: 使用緩存可以大大提高應用程序的性能,特別是對于那些需要頻繁訪問和計算的數據。通過緩存先前計算的結果…

【ARMv8M Cortex-M33 系列 8.1 -- RT-Thread 堆內存 檢查命令 free 實現及介紹】

文章目錄 RT-Thread 堆內存 檢查命令 free 實現及介紹rt_memory_info 函數驗證 RT-Thread 堆內存 檢查命令 free 實現及介紹 在RT-Thread系統中&#xff0c;通常可以通過rt_memory_info函數獲取當前的堆內存使用信息&#xff0c;然后你可以包裝這個函數來顯示剩余的堆空間。rt…

最全整理,軟件測試-Web頁面測試思路總結,13年經驗...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 1、Web功能測試 …

Vim 模式切換 | 命令集

Vim 模式切換 | 命令集 vim 主要模式及切換一、正常/普通/命令模式1 光標相關操作命令集1.1 光標移動1.2 文字刪除1.3 粘貼和復制1.4 替換1.5 字符更改 二、插入模式2.1 插入模式和命令行模式相互切換 三、末行模式2.1 末行模式和命令行模式相互切換2.2 末行模式相關命令集 vim…

【EI會議征稿通知】第十屆機械工程、材料和自動化技術國際會議(MMEAT 2024)

2024年第十屆機械工程、材料和自動化技術國際會議(MMEAT 2024) 2024 10th International Conference on Mechanical Engineering,Materials and Automation Technology 2024年第十屆機械工程、材料和自動化技術國際會議( MMEAT 2024) 將于2024年06月21-23日在中國武漢舉行。MM…

【LeetCode每日一題】單調棧316去除重復字母

題目&#xff1a;去除重復字母 給你一個字符串 s &#xff0c;請你去除字符串中重復的字母&#xff0c;使得每個字母只出現一次。需保證 返回結果的字典序最小&#xff08;要求不能打亂其他字符的相對位置&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;s “bcabc” 輸…

docker自定義網絡實現容器之間的通信

Background docker原理 docker是一個Client-Server結構的系統&#xff0c;Docker的守護進程運行在主機上。通過Socket從客戶端訪問。docker核心三大組件&#xff1a;image–鏡像、container-容器、 repository-倉庫。docker使用的cpu、內存以及系統內核等資源都是直接使用宿主…

python 函數-04-參數收集-帶1個或2個星號

一個函數&#xff0c;至多可以帶一個一星參數&#xff08;收集位置參數&#xff09;&#xff0c;加上一個二星參數&#xff08;收集關鍵字參數&#xff09;。 01 一個星號參數 入參為不定參數&#xff08;參數個數不確定&#xff09;&#xff0c;此時在定義參數時&#xff0c…

最簡單方式把jar打包成Windows服務

廢話 &#x1f622; 將JAR文件轉化為Windows服務是一種高效且常見的Java應用部署策略。這種轉變賦予了Java應用程序在Windows操作系統上以無界面后臺服務模式運行的能力&#xff0c;從而實現了持續、穩定且可靠的功能提供。這種部署方式不僅提升了應用的可用性&#xff0c…

Python學習筆記——類(編程風格)

編寫的應用比較復雜時&#xff0c;特別是大型項目&#xff0c;團隊分工協同&#xff0c;尤其要注意編程風格。 &#xff08;1&#xff09;類名應采用駝峰命名法&#xff0c;即將類名中的每個單詞的首字母都大寫&#xff08;類名的首字母是大寫的&#xff09;&#xff0c;并且不…

導入excel某些數值是0

目錄 導入excel某些數值是0數據全部都是0原因解決 部分數據是0原因解決 導入excel某些數值是0 數據全部都是0 有一列“工單本月入庫重量”全部的數據都是0 原因 展示的時候&#xff0c;展示的字段和內表需要展示的字段不一致&#xff0c;導致顯示的是0。 解決 修改展示的字…

kubernetes面試題及核心知識點

無狀態負載deployment有狀態管理 &#xff1a; config配置文件 secret密碼文件 內置volumn插件 1、emptyDir宿主機的存儲為容器分配資源。臨時儲存&#xff0c;隨著pod的刪除而消失&#xff0c; 2、hostPath宿主機的存儲為容器分配資源。不會隨著pod的刪除而消失&#xf…

Video generation models as world simulators-視頻生成模型作為世界模擬器

原文地址&#xff1a;Video generation models as world simulators 我們探索在視頻數據上進行大規模生成模型的訓練。具體來說&#xff0c;我們聯合訓練文本條件擴散模型&#xff0c;同時處理不同持續時間、分辨率和長寬比的視頻和圖像。我們利用一個在視頻和圖像潛在編碼的時…

AGI|AI到底如何生成視頻?Sora究竟為何能引爆科技圈?

目錄 一、AI生成視頻引發新浪潮 二、生成方法及難點 三、Sora的突破進展 &#xff08;一&#xff09;可生成不同尺寸視頻 &#xff08;二&#xff09;可生成1分鐘時長視頻 &#xff08;三&#xff09;圖片生成視頻 &#xff08;四&#xff09;場景一致性 &#xff08;五…