| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Copyright 2014 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <sample> |
| <name>Camera2Video</name> |
| <group>Media</group> |
| <package>com.example.android.camera2video</package> |
| |
| <dependency>com.android.support:appcompat-v7:23.0.0</dependency> |
| <minSdk>21</minSdk> |
| |
| <strings> |
| <intro> |
| <![CDATA[ |
| This sample demonstrates how to record video using Camera2 API. |
| ]]> |
| </intro> |
| </strings> |
| |
| <template src="base"/> |
| |
| <metadata> |
| <status>PUBLISHED</status> |
| <categories>Media</categories> |
| <technologies>Android</technologies> |
| <languages>Java</languages> |
| <solutions>Mobile</solutions> |
| <level>ADVANCED</level> |
| <icon>screenshots/icon-web.png</icon> |
| <screenshots> |
| <img>screenshots/1-launch.png</img> |
| <img>screenshots/2-record.png</img> |
| <img>screenshots/3-save.png</img> |
| </screenshots> |
| <api_refs> |
| <android>android.hardware.camera2.CameraCaptureSession</android> |
| <android>android.hardware.camera2.CameraDevice</android> |
| <android>android.view.TextureView</android> |
| </api_refs> |
| <description> |
| <![CDATA[ |
| This sample shows how to record video using the new Camera2 API in Android Lollipop. |
| ]]> |
| </description> |
| |
| <intro> |
| <![CDATA[ |
| Android Lollipop introduced a new camera API, called camera2. This sample uses [CameraDevice][1] |
| and [CameraCaptureSession][2] to record video. It also uses a custom [TextureView][3] to render the output. |
| |
| The main steps are: |
| |
| 1. Create a custom TextureView class and add it to the layout. The purpose of the custom TextureView is |
| to be able to draw itself according to an aspect ratio, which is set via a public method. Additionally, |
| the `onMeasure(int widthMeasureSpec, int heightMeasureSpec)` method is overridden, using the aspect ratio. |
| 2. Implement a `TextureView.SurfaceTextureListener` on your TextureView, and override its |
| `onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height)` method to calculate |
| the matrix to apply to the TextureView so the camera output fits. Use the method `setTransform(matrix)` on |
| the TextureView. |
| 3. Implement a [`CameraDevice.StateCallback`][4] to receive events about changes of the state of the |
| camera device. Override its methods to set your CameraDevice instance, start the preview, and stop |
| and release the camera. |
| 4. When starting the preview, set up the MediaRecorder to accept video format. |
| 5. Then, set up a [`CaptureRequest.Builder`][5] using `createCaptureRequest(CameraDevice.TEMPLATE_RECORD)` |
| on your CameraDevice instance. |
| 6. Then, implement a [`CameraCaptureSession.StateCallback`][6], using the method |
| `createCaptureSession(surfaces, new CameraCaptureSession.StateCallback(){})` on your CameraDevice instance, |
| where `surfaces` is a list consisting of the surface view of your TextureView and the surface of |
| your MediaRecorder instance. |
| 7. Use `start()` and `stop()` methods on your MediaRecorder instance to actually start and stop the recording. |
| 8. Lastly, set up and clean up your camera device in `onResume()` and `onPause()`. |
| |
| |
| [1]: https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html |
| [2]: http://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html |
| [3]: http://developer.android.com/reference/android/view/TextureView.html |
| [4]: https://developer.android.com/reference/android/hardware/camera2/CameraDevice.StateCallback.html |
| [5]: http://developer.android.com/reference/android/hardware/camera2/CaptureRequest.Builder.html |
| [6]: http://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.StateCallback.html |
| ]]> |
| </intro> |
| </metadata> |
| |
| </sample> |