- Home /
Question by
Starktech · Jul 24, 2013 at 01:28 PM ·
rendertexturescreenshotfile-io
Capture Screenshots in a Row
I would like to capture a continuous moving action in Unity, so that I could use those screenshots to post-produce a movie through library like FFMpeg on Android. By referencing this article I do captured screenshots I want. However, when the action goes more complex and the frames increases, the whole thread seems freeze and has no any response.
I got so many log output from unity like:
D/Unity (29568): Watchdog wakeup : 3.98s has past without activity
D/Unity (29568): Watchdog wakeup : 5.36s has past without activity
D/Unity (29568): Watchdog wakeup : 6.63s has past without activity
D/Unity (29568): Watchdog wakeup : 8.52s has past without activity
D/Unity (29568): Watchdog wakeup : 9.96s has past without activity
D/Unity (29568): Watchdog wakeup : 5.91s has past without activity
My code snippet which take the screenshot and saved it :
public IEnumerator CaptureScreen (float duration)
{
// calculate how much frames taken by this frame under currently set fps
int targetFrames = (int) Math.Round (duration * captureFPS);
renderTexture = new RenderTexture(Screen.width, Screen.height, 24);
captureCam.targetTexture = renderTexture;
Texture2D texture2d = new Texture2D(cropWidth, cropHeight, TextureFormat.RGB24, false);
captureCam.Render();
RenderTexture.active = renderTexture;
texture2d.ReadPixels(new Rect(0, 0, cropWidth, cropHeight), 0, 0);
RenderTexture.active = null;
byte[] bytes;
yield return bytes = texture2d.EncodeToPNG();
Destroy(texture2d);
// get target numbers from the same frame.
for (int i = 0; i < targetFrames; i++)
{
++frameCounter;
// full file path, generated by Application.persistentDataPath + folder & filename
string filePath = Utils.AnimeFrameName(frameCounter);
using( FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write) )
{
fs.Write(bytes, 0, bytes.Length);
yield return fs;
Debug.Log("Screenshot to =>>> " + filePath);
}
}
}
Have no idea why the whole progress just freeze but not crash and force-close the app.
Comment