无法从android media recorder播放mp4视频
我正在制作一个Android Things应用程序,使用rasberry pie 3摄像头模块录制x时间的视频,当我试图打开新创建的mp4文件时,它说它无法播放 我还注意到,尽管我的应用程序不得不录制更长的视频(10分钟),但所有视频片段都有一个特定的文件大小,即3.4kb 也许我没把它设置好?不过,我在日志中没有看到任何错误 以下是我创建供相机使用的曲面对象的代码:无法从android media recorder播放mp4视频,android,kotlin,android-mediarecorder,android-things,Android,Kotlin,Android Mediarecorder,Android Things,我正在制作一个Android Things应用程序,使用rasberry pie 3摄像头模块录制x时间的视频,当我试图打开新创建的mp4文件时,它说它无法播放 我还注意到,尽管我的应用程序不得不录制更长的视频(10分钟),但所有视频片段都有一个特定的文件大小,即3.4kb 也许我没把它设置好?不过,我在日志中没有看到任何错误 以下是我创建供相机使用的曲面对象的代码: private fun setMediaOutputSurface(): Surface { var file = F
private fun setMediaOutputSurface(): Surface {
var file = File(context.getExternalFilesDir(null).absolutePath)
if (file.canWrite() && file.canRead()) {
Log.d("JJJ", "File location is fine")
var files = file.listFiles()
for (item in files) {
Log.d("JJJ", "File is " + item.name)
}
}
val texture = mTextureView.surfaceTexture
texture.setDefaultBufferSize(mTextureView.width, mTextureView.height)
val surfaces = ArrayList<Surface>()
val surfacePreview = Surface(texture)
mediaRecorder = MediaRecorder().apply {
setVideoSource(MediaRecorder.VideoSource.SURFACE)
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setOutputFile(context.filesDir.absolutePath + "/" + System.currentTimeMillis() + ".mp4")
setVideoEncoder(MediaRecorder.VideoEncoder.H264)
setVideoSize(1920, 1080)
setVideoFrameRate(30)
setVideoEncodingBitRate(512 * 1000)
setPreviewDisplay(surfacePreview)
prepare()
Log.d("JJJ", "Finished preparing on file path " + context.filesDir.absolutePath + "/" + System.currentTimeMillis() + ".mp4")
}
return mediaRecorder.surface
}
这是开始录制的功能
override fun startRecording(videoCameraCallback: VideoCameraCallback, textureView: TextureView) {
mTextureView = textureView
val cameraIdList = cameraManager.cameraIdList
val cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraIdList[0])
cameraManager.openCamera(cameraIdList[0], cameraStateCalback, null)
Log.d("JJJ", "start recording called")
}
override fun stopRecording() {
mediaRecorder.stop()
mediaRecorder.release()
Log.d("JJJ", "stop recording called")
}
这是为了停止录制
override fun startRecording(videoCameraCallback: VideoCameraCallback, textureView: TextureView) {
mTextureView = textureView
val cameraIdList = cameraManager.cameraIdList
val cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraIdList[0])
cameraManager.openCamera(cameraIdList[0], cameraStateCalback, null)
Log.d("JJJ", "start recording called")
}
override fun stopRecording() {
mediaRecorder.stop()
mediaRecorder.release()
Log.d("JJJ", "stop recording called")
}
最后,一切都是这样开始的
videoCameraRecorder = VideoCameraRecorder(applicationContext)
Handler().postDelayed({
videoCameraRecorder.startRecording( object : VideoCameraCallback {
override fun onFinishedRecordingSuccess() {
Log.d(TAG, "onFinishedRecordingSuccess")
}
override fun onFinishedRecordingFailure() {
Log.d(TAG, "onFinishedRecordingFailure")
}
}, textureView)
Handler().postDelayed({
videoCameraRecorder.stopRecording()
}, 100000)
}, 5000)