android mediarecorder vlc 服务器,android - 将H.264视频流和AAC音频流与mediamuxer结合使用,但无法播放合并的mp4视频 - 堆栈内存溢出...

普通mp4文件

3ef6faf7db25dae6d9720c8a1bded235.png

我生成的视频文件

b15d33ce93b5c439bb7edd8897bc5327.png

媒体格式

MediaFormat videoMediaFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC,

mVideoSize.getWidth(), mVideoSize.getHeight());

videoMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, Constant.VIDEO_BIT_RATE);

videoMediaFormat.setByteBuffer(Constant.CSD_0, ByteBuffer.wrap(sps));

videoMediaFormat.setByteBuffer(Constant.CSD_1, ByteBuffer.wrap(pps));

视频写法

private void writeVideoData(byte[] videoData) {

Log.d(TAG, "writeVideoData: length = " + videoData.length);

MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();

Log.d(TAG, "writeVideoData: FLAG_KEY_FRAME = " + Tool.byteToHexString(videoData[Constant.FLAG_KEY_FRAME]));

if (videoData[Constant.FLAG_KEY_FRAME] == Constant.KEY_FRAME

| videoData[Constant.FLAG_KEY_FRAME] == Constant.KEY_FRAME_1) {

bufferInfo.flags = MediaCodec.BUFFER_FLAG_KEY_FRAME;

} else {

bufferInfo.flags = 0;

}

bufferInfo.offset = 0;

if (startTime == 0L) {

bufferInfo.flags = MediaCodec.BUFFER_FLAG_KEY_FRAME;

bufferInfo.presentationTimeUs = startTime;

startTime = System.nanoTime();

Log.d(TAG, "writeVideoData: time = " + 0);

} else {

long time = (System.nanoTime() - startTime) / 1000;

Log.d(TAG, "writeVideoData: time = " + time);

bufferInfo.presentationTimeUs = time;

}

bufferInfo.size = videoData.length;

boolean isInit = videoTrack != Constant.DEFAULT_TRACK && mediaMuxer != null;

if (isInit) {

writeSampleData(videoTrack, ByteBuffer.wrap(videoData), bufferInfo);

}

}

流是通过mediarecorder获得的

DataInputStream dis = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream(videoRead));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值