无法从android media recorder播放mp4视频

无法从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

我正在制作一个Android Things应用程序,使用rasberry pie 3摄像头模块录制x时间的视频,当我试图打开新创建的mp4文件时,它说它无法播放

我还注意到,尽管我的应用程序不得不录制更长的视频(10分钟),但所有视频片段都有一个特定的文件大小,即3.4kb

也许我没把它设置好?不过,我在日志中没有看到任何错误

以下是我创建供相机使用的曲面对象的代码:

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)