chrome中无法播放mediacodec录制的mp4文件,声音不正常的原因

如题,在用安卓的mediacodec对camera的图像进行H.264视频编码,对micphone的声音进行aac编码,合成mp4,在用ffplay和vlc播放的时候都是正常的,但是使用chrome浏览器播放却没有声音。于是将aac的码流转为adts进行分析,发现第一帧去掉头后只有2个字节,原来mediacodec编码后产生的第一个帧是audio specific config,不是音频帧。把它当成音频帧写进mp4,chrome就不能解码了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 MediaCodec 录制 SurfaceView 的图像,您需要执行以下步骤: 1. 获取 Surface 对象:您可以使用 SurfaceView 的 getHolder() 方法获取 SurfaceHolder 对象,然后使用该对象的 getSurface() 方法获取 Surface 对象。 2. 创建 MediaCodec 对象:您需要创建一个 MediaCodec 对象来编码视频数据。使用 MediaCodec.createEncoderByType() 方法创建对象并指定编码器类型(例如 AVC)。 3. 配置 MediaCodec 对象:要将 MediaCodec 对象与 Surface 对象一起使用,您需要调用 MediaCodec 的 configure() 方法,并将 Surface 对象作为输入源传递。 4. 启动 MediaCodec 对象:调用 MediaCodec 的 start() 方法启动编码器。 5. 从 Surface 捕获图像:使用 Surface 对象的 lockCanvas() 方法获取 Canvas 对象,然后使用 Canvas 对象绘制您要录制的图像。一旦您完成了绘制,调用 unlockCanvasAndPost() 方法将图像发送到 Surface。 6. 将图像传递给 MediaCodec:使用 MediaCodec 的 dequeueInputBuffer() 方法获取一个输入缓冲区,并将图像数据存储在该缓冲区。然后,使用 queueInputBuffer() 方法将缓冲区传递给编码器。 7. 从 MediaCodec 获取编码后的数据:使用 dequeueOutputBuffer() 方法获取一个输出缓冲区,并从该缓冲区获取编码后的数据。然后,使用 releaseOutputBuffer() 方法释放缓冲区。 8. 停止和释放资源:当您完成录制时,调用 MediaCodec 的 stop() 方法停止编码器,并调用 release() 方法释放资源。 注意,这只是一个大致的流程,具体实现可能会有所不同。您可能需要查阅更多关于 MediaCodec 和 Surface 的文档以及示例代码来了解更多细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值