2012-12-11 28 views
8

經過大量的搜索和實驗的日子,我還沒有找到一個直截了當的解決方案。在android上的應用程序屏幕錄製捕捉每秒15幀

我正在開發一個應用程序,用戶將與屏幕上的寵物進行交互,並且我想讓他將它保存爲視頻。

是否有任何「簡單」的方式來捕捉應用程序本身的屏幕?

我找到了一種解決方法(每秒保存一些位圖,然後將它們傳遞給編碼器),但看起來太重了。我甚至有每秒15幀的幀率快樂

這似乎是可能的,即有一個類似的應用程序,這樣做,它被稱爲「會說話的湯姆」

+4

你有實際記錄屏幕?或者,您是否可以基於錄製用戶輸入/寵物狀態來呈現視頻,該狀態看起來與屏幕完全一樣,而無需實際進行屏幕捕獲? –

+2

「有沒有」簡單「的方法來捕捉應用程序本身的屏幕?」 - 你爲什麼要這樣做,而不是直接創建一個位圖的所需內容?當您在Photoshop等圖像編輯器中保存圖像時,您是否認爲該應用會截圖並保存該圖像? – CommonsWare

+1

你使用OpenGL渲染你的寵物嗎?你可以在每幀之後使用'glReadPixels()'來獲取數據,然後使用它來做任何你想要的。是的,這個建議與您提到的「解決方法」基本相同。我認爲Android沒有內置任何神奇的「recordScreenToVideoFile()」,因此抓取幀並對它們進行編碼可能是您將要獲得的最佳效果。 –

回答

1

這真的取決於你實現你的「寵物的方式視圖」。你在畫布上畫畫嗎? OpenGl ES?正常的Android視圖層次?

無論如何,沒有神奇的「recordScreenToVideo()」就像其中一條評論所說的那樣。

您需要:

  • 獲得代表你的 「幀」 位圖。 這取決於你如何實現你的視圖。如果您自己繪製(Canvas或OpenGL),則將原始像素緩衝區保存爲幀。 如果您使用普通視圖層次結構,請將Android的onDraw子類化並保存在畫布上的「幀」。系統調用onDraw的頻率不會低於屏幕的實際「幀率」。如果需要,之後複製幀以提供15fps的視頻。

  • 編碼你的幀。似乎你已經有一個機制來做到這一點,你只需要它更有效率。您的位圖(幀)和編碼後

    • 緩存:

    方法可以優化編碼。只有當您的預期視頻相對較短時,纔會使用 ,否則 您將無法使用存儲空間。

  • 只記錄您的應用程序實際生成的幀率(取決於您繪製的方式)並使用編碼器參數生成15fps視頻(實際上不提供每秒15幀)。
  • 將質量設置調整到當前設備。可以通過在應用程序啓動時執行隱藏的CPU週期測試並定義一些閾值來完成。
  • 只編碼屏幕最相關的部分。
  • 再一次,真的取決於你實現的方式 - 如果你可以保存一些「歷史數據」,然後將其轉換爲幀而不必實時進行,那將是最好的。 例如,「移動」,「微笑」,「改變顏色」 - 或者你的業務邏輯是什麼,因爲你沒有詳細說明。你的「生成電影」功能將這個歷史數據動畫化爲一個幀序列(不繪製到屏幕),然後進行編碼。

希望幫助