1,ios視頻硬編解碼對幀圖片編輯
這里我們分為三步走 我這邊采用的是 ios利用videotoolbox實現(xiàn)視頻硬解碼 中的方式,demo中提供了兩種解碼方式,一種是第三方庫ffmpeg,另外一種是系統(tǒng)的videotoolbox庫,效率基本上都差不多,作者封裝后都會有一個代理回調, 兩種回調都會有一個cmsamplebufferref的對象,它是像素緩沖,其實就是我們解碼后的每一幀的圖片。 在第一步中我們已經拿到了每一幀的圖片,現(xiàn)在我們在其基礎上合成本地圖片,合成圖片我首先想到的是下面的方法, 這個方法是通過兩個image的對象,最終合成一個新的image,效果可以實現(xiàn),但是在我們這個場景中,我們在對視頻解碼時,是一個連續(xù)異步的操作,代理會不斷的回調,此時如果采用這個方式,會多次創(chuàng)建局部對象, 不能及時釋放,導致內存爆增 ,引起閃退。所以我采用以下方式 這里我用的是ciimage,它提供了一個系統(tǒng)的api
2,蘋果手機解碼怎么解
回答
1.首先將手機強制關機,并在電腦端安裝itunes并打開。2.用數(shù)據線將手機與電腦連接起來,長按手機電源鍵。3.當出現(xiàn)蘋果標志時不要松開電源鍵,接著按home 鍵,直到屏幕黑屏。4.松開電源鍵,繼續(xù)按住 home 鍵不放,直到看見itunes的logo時松開。
5、然后會在電腦上顯示iphone恢復模式,點擊恢復iphone…
6、彈出提示框,點擊恢復并更新,待完成后,就可以正常進入蘋果手機了
提問
手機沒有l(wèi)d碼,好解嗎?
人呢
回答
第一招:使用查找應用設置iphone id密碼。大家打開自己iphone手機上,系統(tǒng)自帶的【查找我的iphone】,先推出賬戶,然后再進去選擇頁面下方的【忘記apple id或密碼】就設置自己的iphone id新密碼了。不過需要注意的是,設置新密碼的時候的需要大家輸入自己的屏保密碼的,相信大家是記住了的,另外新密碼最好復雜一點再背下來,因為iphone id密碼非常重要,如果別人知道你的密碼,就可以隨意管理你手機里的照片、通訊錄。
第二招:使用驗證修改iphone id密碼。大家可以進入iphone手機的【設置】里面,然后選擇里面的【密碼與安全性】選項,就可以看到【密碼與賬戶安全】的界面。在這里大家就可以和上一個方法一樣,修改密碼就好了。這個方法也是需要屏保密碼,才能更改密碼的。
更多5條
3,ios 視頻硬解碼
公司的項目里有拉取h.264視頻流進行解碼播放的功能,本來是采用ffmpeg多媒體庫,用cpu做視頻的編碼和解碼,就是大家常說的軟編軟解。但是軟解存在太占用cpu,解碼效率低等缺點,所以我們一合計干脆用硬解碼代替原來的方案。當然硬件解碼使用的當然就是蘋果大名鼎鼎的 video toolbox 框架,眾所周知,蘋果在ios8開始才可以在ios系統(tǒng)中調用該框架中的 api 。 圖2.1展示的是通過 avsamplebufferdisplaylayer 播放網絡上獲取的h.264碼流。 但并不是說 avsamplebufferdisplaylayer 能直接播放h.264碼流,需要將h.264碼流包裝成 samplebuffer 傳給給 avsamplebufferdisplaylayer 解碼播放。 再來看一下h.264碼流的構成,h.264碼流由一系列的 nal 單元組成。 nal 單元一般包含: 所以如果要將h.264解碼播放就需要將h.264碼流包裝成cmsamplebuffer。由圖1.1可得 cmsamplebuffer = cmtime + cmvideoformatdesc + cmblockbuffer 。 解碼步驟: 1.從網絡獲取的碼流中獲取sps和pps生成cmvideoformatdesc。 (1)h.264 nalu 單元的 start code 是0x 00 00 01 或0x 00 01,按照 start code 定位nalu。 (2)通過類型信息找到 sps 和 pps 并提取,開始碼后第一個 byte 的第5位,7代表 sps ,8代表 pps 。 (3)使用cmvideoformatdescriptioncreatefromh264parametersets函數(shù)來構建cmvideoformatdescription。 2.提取視頻圖像數(shù)據生成cmblockbuffer。 (1)按照 start code 定位nalu。 (2)cmblockbuffer數(shù)據需要的頭部碼為4個字節(jié)的長度,為:0x 00 80 00,所以需要將h.264的header給替換掉。 (3) cmblockbuffercreatewithmemoryblock 接口構造 cmblockbufferref 。 3.根據自己的需要設置cmtime 我的項目中的拉取的實時流需要實時播放,不需要設置時間間隔,所以不用設置cmtime。 4.根據上述得到 cmvideoformatdescriptionref 、 cmblockbufferref 和可選的時間信息,使用 cmsamplebuffercreate 接口得到 cmsamplebuffer 數(shù)據這個待解碼的原始的數(shù)據。 5.用 avsamplebufferdisplaylayer 處理得到 samplebuffer 來顯示圖像。 至此成功用 video toolbox 硬件解碼h.264碼流,并在設備上播放視頻。 可是,如果我們要拿到每一幀圖像進行處理呢,那該怎么得到? 那么我們還需要用 vtdecompressionsession 解碼成 cvpixelbuffer ,通過 uiimageview 或者 opengl es 上顯示。 (1)創(chuàng)建 vtdecompressionsession ,需要以下參數(shù): (2)調用 vtdecompressessiondecodeframe 接口進行解碼。 (3)vtdecompressionsessionoutputcallback回調函數(shù)中可以得到解碼后的結果 cvpixelbuffer ,可以將 cvpixelbuffer 轉換成uiimage圖像顯示在imageview上或者用 opengl es 渲染圖像。