gpt4 book ai didi

android - 如何录制已经在 onPreviewFrame 上流式传输的视频

转载 作者:太空狗 更新时间:2023-10-29 13:48:01 26 4
gpt4 key购买 nike

我开发了一个 android 应用程序,可以通过 TokBox 传输视频.我想录制流媒体视频。为此,我尝试使用 MediaRecorder样本。它在视频录制方面做得很好,但是我失去了我的流。有两个主要的 java 类,就说 A 和 B。类 B 实现了 PreviewCallback。这里有 onPreviewFrame 方法。如果您对 TokBox 感兴趣,B 类扩展 BaseVideoCapturer

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
mPreviewBufferLock.lock();
if (isCaptureRunning) {
if (data.length == mExpectedFrameSize) {
// Get the rotation of the camera
int currentRotation = compensateCameraRotation(mCurrentDisplay
.getRotation());
// Send frame to OpenTok
provideByteArrayFrame(data, NV21, mCaptureWidth,
mCaptureHeight, currentRotation, isFrontCamera());

// Reuse the video buffer
camera.addCallbackBuffer(data);
}
}
mPreviewBufferLock.unlock();
}

A 类是管理记录的 Activity 。有一种开始录像并在 5 秒后停止的方法。

public static boolean prepareAndStartMediaRecorder(){
if(CustomVideoCapturer.isCaptureStarted){
// BEGIN_INCLUDE (configure_media_recorder)
mMediaRecorder = new MediaRecorder();
// Step 1: Unlock and set camera to MediaRecorder
B.mCamera.unlock();
mediaRecorder.setCamera(B.mCamera);
// Step 2: Set sources
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
mMediaRecorder.setProfile(profile);
// Step 4: Set output file
mediaRecorder.setOutputFile("/sdcard/myvideo.mp4");
mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M
//configure preview
mediaRecorder.setPreviewDisplay(mPreview.getSurfaceTexture());
// Step 5: Prepare configured MediaRecorder
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
releaseMediaRecorder();
return false;
} catch (IOException e) {
releaseMediaRecorder();
return false;
}
mediaRecorder.start();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mediaRecorder.stop(); // stop the recording
}
}, 5000);
}

开始录制后,不会调用onPreviewFrame方法。对于这个问题,您有什么解决方案或其他同时录制和流式传输视频的方法吗?

编辑 1:我尝试应用这个 solution , 但它没有用。如果您声称这是正确的解决方案,请通知我。

编辑 2:归档 API 记录流媒体,所以有时会有噪音。我需要直接从相机记录帧以获得高质量视频。

最佳答案

如果您使用的是 OpenTok 并想从相机记录帧,最简单的方法是构建自定义捕获器。

当使用 OpenTok 时,Custom Capturer 是一个类,它从任何地方(例如相机)获取帧并将它们提供给 OpenTok 进行流式传输。获得帧后,您可以记录它们并将它们作为 OpenTok 流发送。有关详细信息,请参阅 developer guide about custom capturers .

请看custom video driver sample了解更多详情。

Here is the code您可以在其中获取帧并使用类似 MediaCodec 类的东西创建记录。

关于android - 如何录制已经在 onPreviewFrame 上流式传输的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51192192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com