我正在尝试实现从Android应用到RTMP目标的视频流。我有两个不同的安装线程,可以输出视频和音频数据。我正在创建“表面” using MediaCodec.createInputSurface
,以创建视频帧。我将此表面添加为Camera2的输入。
val format = MediaFormat.createVideoFormat(MIMETYPE_VIDEO_AVC, width, height)
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface)
format.setInteger(MediaFormat.KEY_BIT_RATE, bitRate)
format.setInteger(MediaFormat.KEY_FRAME_RATE, frameRate)
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
format.setInteger(MediaFormat.KEY_ROTATION, rotation)
}
androidMediaCodec = MediaCodec.createEncoderByType(MIMETYPE_VIDEO_AVC)
androidMediaCodec!!.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
videoSurface = androidMediaCodec?.createInputSurface()
现在的问题是创建AudioEncoder时是否需要做同样的事情?即创建一个曲面并将其添加为camera2的输入?
我问这个问题的原因是,我收到的所有音频缓冲区的presentationTimeUs
都为零。