手机录屏视频提取音频

安卓手机录屏使用XRecorder,个人感觉是第三方录屏比较好用的。

音频提取使用格式工厂,yyds。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android中使用MediaCodec录制屏幕和音频,可以使用MediaProjection API和AudioRecord API。 首先,需要获取MediaProjection对象来捕获屏幕内容。可以使用MediaProjectionManager来请求用户授权并获取MediaProjection对象。例如: ```java MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE); Intent intent = mediaProjectionManager.createScreenCaptureIntent(); startActivityForResult(intent, REQUEST_CODE_SCREEN_CAPTURE); ``` 在onActivityResult回调方法中获取MediaProjection对象: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == RESULT_OK) { mMediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data); } } ``` 接下来,需要创建一个AudioRecord对象来录制音频。可以使用MediaRecorder.AudioSource.MIC作为音频来源。例如: ```java int audioSource = MediaRecorder.AudioSource.MIC; int sampleRate = 44100; int channelCount = AudioFormat.CHANNEL_IN_MONO; int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelCount, audioFormat); mAudioRecord = new AudioRecord(audioSource, sampleRate, channelCount, audioFormat, bufferSize); ``` 在录制音频时,需要以相同的速率将音频数据传递给编码器。可以使用线程循环读取音频数据并将其传递给编码器。例如: ```java mAudioRecord.startRecording(); while (!mStopRecording) { int numBytesRead = mAudioRecord.read(mAudioBuffer, 0, mAudioBuffer.length); if (numBytesRead > 0) { ByteBuffer inputBuffer = mAudioEncoder.getInputBuffer(inputBufferIndex); inputBuffer.clear(); inputBuffer.put(mAudioBuffer, 0, numBytesRead); mAudioEncoder.queueInputBuffer(inputBufferIndex, 0, numBytesRead, presentationTimeUs, 0); presentationTimeUs += 1000000L / sampleRate; } } mAudioRecord.stop(); ``` 在编码视频音频后,需要将它们合并为一个视频文件。可以使用MediaMuxer将它们合并在一起。例如: ```java mMediaMuxer = new MediaMuxer(outputFile.getAbsolutePath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); int audioTrackIndex = -1; while (true) { MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); int trackIndex = mAudioEncoder.dequeueOutputBuffer(bufferInfo, 0); if (trackIndex == MediaCodec.INFO_TRY_AGAIN_LATER) { break; } else if (trackIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { MediaFormat audioFormat = mAudioEncoder.getOutputFormat(); audioTrackIndex = mMediaMuxer.addTrack(audioFormat); mMediaMuxer.start(); } else if (trackIndex >= 0) { ByteBuffer outputBuffer = mAudioEncoder.getOutputBuffer(trackIndex); outputBuffer.position(bufferInfo.offset); outputBuffer.limit(bufferInfo.offset + bufferInfo.size); bufferInfo.presentationTimeUs = presentationTimeUs; mMediaMuxer.writeSampleData(audioTrackIndex, outputBuffer, bufferInfo); mAudioEncoder.releaseOutputBuffer(trackIndex, false); } } ``` 这样,你就可以使用MediaCodec同时录制屏幕和音频了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值