android - camera2 api -> mediaCodec -> mediaMuxer -> mp4 文件
问题描述
我正在尝试获取 mp4 文件。我使用 camera2 api 拍摄视频,并且可以使用 MediaCodec 将其保存为 avc 文件。但我不明白如何重做这段代码,以便使用 MediaMuxer 编码成 mp4 文件。对不起我的英语,这是通过翻译翻译的
private class EncoderCallback : MediaCodec.Callback() {
override fun onInputBufferAvailable(codec: MediaCodec, index: Int) {
}
override fun onOutputBufferAvailable(
codec: MediaCodec,
index2: Int,
info: MediaCodec.BufferInfo
) {
outPutByteBuffer = mCodec!!.getOutputBuffer(index2)
val outDate = ByteArray(info.size)
outPutByteBuffer!![outDate]
try {
Log.i("EncoderCallBack", " outDate.length : " + outDate.size)
outputStream!!.write(outDate, 0, outDate.size)
} catch (e: IOException) {
e.printStackTrace()
}
mCodec!!.releaseOutputBuffer(index2, false)
}
override fun onError(codec: MediaCodec, e: MediaCodec.CodecException) {
Log.i("EncoderCallBack", "Error: $e")
}
override fun onOutputFormatChanged(codec: MediaCodec, format: MediaFormat) {
Log.i("EncoderCallBack", "encoder output format changed: $format")
}
}
初始化 MediaCodec 后,我录制视频:
var texture: SurfaceTexture = textureViewOver
texture.setDefaultBufferSize(320, 240)
surface = Surface(texture)
builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
builder.addTarget(surface)
builder.addTarget(mEncoderSurface!!)
mCameraDevice.createCaptureSession(
mutableListOf(surface, mEncoderSurface),
object : CameraCaptureSession.StateCallback() {...
解决方案
缺少复用器代码:
override fun onOutputBufferAvailable(
codec: MediaCodec,
index2: Int,
info: MediaCodec.BufferInfo
) {
outPutByteBuffer = mCodec!!.getOutputBuffer(index2)
mediaMuxer?.writeSampleData(trackIndex, outPutByteBuffer, info)
mCodec!!.releaseOutputBuffer(index2, false)
}
推荐阅读
- r - 如何在用户定义的函数中从数据集中对列进行子集化?
- firebase - 如何使用 Firestore 在 Flutter 中更新密码
- git - 格式化电脑后,Git push 没有响应
- java - WriteValueAsString Jackson 将附加属性显示为具体字段
- c# - “多次安装 MSBuild”时,Dotnet 项目转换 try-convert 失败
- c++ - 如何在类对象上获取用户输入
- ios - Visual Studio 2019 Xamarin Apple 帐户中缺少 iOS 分发证书,它位于苹果开发人员帐户中,已导入配置文件
- wordpress - 从谷歌取消索引旧网站(旧域名)
- angular - 如何在另一个组件引导模式中使用的组件中修补值?
- html - 垂直幻灯片动画