[英]iOS video playback
在我的應用程序中,我應該以不尋常的方式播放視頻。 諸如用於特殊目的的交互式播放器之類的東西。
這里的主要問題:
現在我正在做下一件事:
在我使用320 * 240像素之前,一切看起來都很好,但是如果我使用512 * 512px,我的播放率就會下降。 也許定時器問題,也許是OpenGL。 有時,如果我試圖以較高的播放速率(大於10-15 FPS)打開大紋理,則應用程序會因內存警告而崩潰。
解決此問題的最佳實踐是什么? 我應該挖掘哪個方向? 也許cocos2d或其他游戲引擎可以幫助我嗎? Mb JPG不是紋理的最佳解決方案,我應該使用PNG或PVR還是其他?
將視頻數據保留為視頻,並使用AVAssetReader
獲取原始幀。 使用kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
作為色彩空間,並在GLES中進行YUV-> RGB色彩空間轉換。 這將意味着在內存中保留更少的數據,並使您的圖像處理變得更加簡單(因為您將使用亮度和色度數據而不是RGB值)。
您無需為此而煩惱Cocos 2d或任何游戲引擎。 我強烈建議您對OpenGL ES 2.0和着色器進行一些實驗。 將OpenGL用於視頻非常簡單明了,將游戲引擎添加到混合中是不必要的開銷和抽象。
將圖像數據上載到紋理時,請勿在每一幀都創建一個新紋理。 相反,創建兩個紋理:一個用於亮度,一個用於色度數據,然后在每個幀中簡單地重復使用這些紋理。 我懷疑您的內存問題是由每幀使用許多圖像和新紋理引起的,並且可能沒有刪除舊紋理。
JPEG幀解壓縮將非常昂貴。 第一步:使用PNG。
可是等等! 還有更多。
Cocos2D可以通過對Sprite Sheet的強大支持而在很大程度上為您提供幫助。
但是,最大的幫助可能來自TexturePacker的打包紋理。 使用PVR.CCZ壓縮可以加快處理速度,足以讓您在更大的視頻尺寸下獲得更好的幀速率。
弗拉德,簡短的答案是,您可能永遠無法同時獲得列出的所有這些功能。 以60 FPS的速度播放1024 x 1024視頻確實很費力,我非常懷疑iOS硬件是否能夠跟上60 FPS的那種數據傳輸速率。 甚至設備上的h.264硬件也只能在1080p時達到30FPS。 可能是可以的,但是要在視頻上疊加圖形渲染並期望能夠同時編輯亮度/對比度,這是太多時間了。
您應該專注於實際可能發生的事情,而不是嘗試執行所有功能。 如果要查看將iPad硬件推向極限的Xcode應用示例,請查看我的Fireworks示例項目。 此代碼可同時在屏幕上顯示多個已解碼的h.264視頻。 該實現是基於CoreGraphics API構建的,但是關鍵是由於零拷貝優化,Apple將紋理上傳到OpenGL的速度非常快。 通過這種方法,可以將大量視頻流式傳輸到設備。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.