我試圖讓用戶錄製視頻是不同的尺寸比實際的屏幕預覽,他們可以看到在錄製錄製視頻。這似乎可以從this documentation concerning the getSupportedVideoSizes
function其中規定:用不同的預覽大小比生成的視頻文件
如果返回的列表不爲空,則返回的列表將包含在 至少一個的大小和尺寸之一返回列表中必須 傳遞給MediaRecorder。攝像機應用程序的setVideoSize()如果使用 攝像機作爲視頻源。 在這種情況下, 預覽的大小可能與視頻錄製過程中錄製的視頻 的分辨率不同。
這表明,一些手機將返回null從這個FN(在我的經驗銀河SIII一樣),但對於那些誰不這樣做,就可以提供預覽具有不同分辨率比實際的視頻。這種理解是否正確?有些手機允許行爲,而其他手機不行?
嘗試一個解決方案:
在official description of the setPreviewDisplay
功能,這是在lengthy process of setting up for video recording使用時,需提到的是:
如果此方法被稱爲具有空表面或完全不叫,媒體 錄像機不會更改相機的預覽表面。
這似乎是我想要的,但不幸的是,如果我這樣做,整個視頻錄製過程是完全搞砸了。我假設這個函數在錄製視頻的過程中不能傳遞null或者根本沒有被調用。也許在其他情況下,這是好的。不幸的是,這似乎並沒有幫助我。
我接下來的步驟是查看TextureView
s,並使用預覽紋理而不是典型的SurfaceView實現,以便使用openGL將紋理拉伸到與實際分辨率不同的所需大小(並裁剪任何超出屏幕),然後用Surface(SurfaceTexture surfaceTexture)
構造函數爲Surface創建setPreviewDisplay
函數的曲面。由於ICS下面的不兼容性,我想避免使用TextureView
,並且還因爲這增加了很大的複雜性。
這似乎是一個微妙的過程,但我希望有人能在這方面提供一些建議。
謝謝。
你能澄清一下「完全搞砸」的含義嗎? –
如果我沒有記錯,這意味着預覽表面變黑,沒有任何記錄。 –