Articles of android mediarecorder

Android Media Recorder不在Google Glass上录制长video

我已经为Google Glass编写了一个开源摄像头 ,但是一些使用它的人报告说,录制的video无法正确保存以供长video使用。 我无法在Android文档中find有关任何此类限制的信息 因此,在检查后,我发现对于超过26 minutes的video,video文件保存在Glass中,其大小约为2.7 GB但持续时间为0:00 。 它无法使用任何video播放器播放。 所以我想知道为什么会这样? 为什么video会在duration < 26 minutes被正确录制,并且会导致较长时间的video混乱。 启动video录制的代码是 /** * Initialize video recorder to record video */ private void initRecorder() { try { File dir = new File(Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_PICTURES + File.separator + “My Videos”); if (!dir.exists()) { dir.mkdirs(); } videofile = new File(dir, “video.mp4”); recorder.setCamera(mCamera); […]

如何在三星设备android上录制特定宽度和高度的video?

您好我正在制作一个Android应用程序,其中我使用自定义摄像头录制摄像头。我在三星设备上有问题。我无法将媒体记录器的配置文件设置为CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_HIGH) 也试着用 profile = CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_LOW); profile.videoFrameHeight=360; profile.videoFrameWidth=640; 然后我的应用程序正在处理某些设备,但在许多设备上崩溃。任何types的帮助都会很明显。谢谢提前请检查代码 Camera.Parameters param = mCamera.getParameters(); param.set( “cam_mode”, 1 ); // Enable video stabilization. Convenience methods not available in API // level <= 14 String vstabSupported = param.get("video-stabilization-supported"); if ("true".equals(vstabSupported)) { param.set("video-stabilization", "true"); } List sizes = mCamera.getParameters() .getSupportedVideoSizes(); mCamera.setParameters( param ); mMediaRecorder = new MediaRecorder(); // […]

如何在video录制中添加文字?

我搜索很多但没有find任何解决方案。 我的问题是如何在录制时向video添加文字,这样我们就可以在看到video时获得相同的文字。 当我看到捕捉video时,我想要这样的东西。 目前我正在分时间和video。 所以问题是如何结合它。任何一种帮助将不胜感激。谢谢你提前..

Android Mediarecorder录制的video时长与预期持续时间不同

我用android Mediarecorder录制了一个video。 (主要问题:我需要知道video的确切startTime [系统时间]和endTime [系统时间],[endTime – startTime]必须与实际video的持续时间相匹配) MediaRecorder.start startTime = System.currentTimeMillis() then on stop MediaRecorder.stop endTime = System.currentTimeMillis() 我期待video有这段时间 expected_duration =(endTime – startTime) 但是,那 expected_duration总是超过video的实际持续时间。 我怀疑MediaRecorder.start很慢,它实际上开始将帧写入video需要一些时间。 那么现在,当MediaRecorder开始将第一帧写入video时,是否有通知? 或者有什么方法可以找出video实际开始录制时的确切系统开始时间。 感谢阅读,并感谢任何意见,建议或意见。 ^^

无法使用MediaRecorder录制通话

我用棒棒糖扎根了 Nexus手机。 我正在尝试记录来电和去电。 我的应用程序使用策略扩展了DeviceAdminReceiver 我能够创建大小> 0bytes的文件。 但是当我玩它时,它是空白的。 请看下面的代码: 的Manifest.xml ….. ….. device_admin.xml CallRecoderBroadcast.java /** * Lifecycle : * Incoming call : RINGING -> OFFHOOK -> IDLE * Outgoing Call : OFFHOOK -> IDLE */ public class CallRecoderBroadcast extends BroadcastReceiver { private static final String TAG = “CallRecoderBroadcast”; private static final String ACTION_PHONE = “android.intent.action.PHONE_STATE”; private […]

无需使用媒体提取器,无法在Android 4.2上对video进行低级解码

我想在不使用提取器的情况下解码video帧。 所以我只尝试了一个小样本,我使用了媒体提取器,但是我没有使用extractor.readsample()将比特流数据复制到输入缓冲区而是使用FFmpeg解析器,在JNI中,我将video帧记忆到输入字节缓冲区然后将输入缓冲区排队..但是当我调用decoder.dequeueOutputBuffer(info, 10000) ,它返回MediaCodec.INFO_TRY_AGAIN_LATER 。 如果我使用extractor.readsample()它可以正常工作。 请在下面find代码段: Java方面: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import android.app.Activity; import android.media.MediaCodec; import android.media.MediaCodec.BufferInfo; import android.media.MediaExtractor; import android.media.MediaFormat; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; public class VideoBrowser extends Activity implements SurfaceHolder.Callback { private static final String SAMPLE = Environment.getExternalStorageDirectory() […]

Android通话录音未录制来电语音

我正在使用自动呼叫记录器应用程序,我能够使用MediaRecorder.AudioSource.VOICE_CALL在android 6下方录制语音呼叫,从android 6无法使用VOICE_CALL录制语音呼叫。 我设法使用MediaRecorder.AudioSource.MIC进行录制,但这里传入的语音没有录制,我想在正常模式下录制语音通话,而不是在扬声器模式下录制。 请帮帮我。 (我曾尝试过Xiomi Redmi 4a(android 6),没有工作)。 myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); myRecorder.setMaxDuration(60 * 60 * 1000); AudioManager audiomanager = (AudioManager)getSystemService(AUDIO_SERVICE); audiomanager.setMode(2); 编辑:权限没有问题。 更新:任何人都知道如何强制另一个流到MIC音频源。 这需要原生的android代码。 请帮助我。 有关路由音频的更多详细信息,请参阅此问题

任何人都有MediaRecorder使用ParcelFileDescriptor和createPipe()?

我试图找出一个录制音频的例子,数据存储由应用处理,而不是MediaRecorder 。 用例包括将记录存储在内部存储器或加密记录。 原则上,这应该使用由createPipe()上的createPipe()创建的管道,但我得到格式错误的输出。 首先, 这是一个使用MediaRecorder “自然”记录的示例项目 , MediaRecorder直接写入外部存储器上的输出文件。 这个应用程序运行正常,输出可以由记录它的Android设备或我的Linux机器上的VLC播放。 这是我的createPipe()项目的变体 。 从一般的MediaRecorder配置(例如, setOutputFormat() )的角度来看,它与第一个相同,因此代码可能是正确的。 但是,我通过以下方式提供输出: recorder.setOutputFile(getStreamFd()); getStreamFd()使用createPipe() ,生成后台线程以从管道读取,并返回写入结束以供MediaRecorder使用: private FileDescriptor getStreamFd() { ParcelFileDescriptor[] pipe=null; try { pipe=ParcelFileDescriptor.createPipe(); new TransferThread(new AutoCloseInputStream(pipe[0]), new FileOutputStream(getOutputFile())).start(); } catch (IOException e) { Log.e(getClass().getSimpleName(), “Exception opening pipe”, e); } return(pipe[1].getFileDescriptor()); } TransferThread是一个经典的java.io流到流复制例程,增加了智能来刷​​新和同步输出文件: static class TransferThread extends Thread { InputStream in; […]

MediaRecorder.stop()停止失败:-1007

我正在使用MediaRecorder录制video。 我的代码在2.3.3上工作正常但在4.0.3上失败。 问题如下:代码mediaRecorder.stop()抛出RuntimeExeption java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method) 使用LogCat消息 04-05 15:10:51.815: E/MediaRecorder(15709): stop failed: -1007 UPDATE 我发现,MediaPlayer几乎在启动后立即报告错误(通过MediaPlayer.OnErrorListener)。 错误代码为100(媒体服务器死机),额外-1007。 更新2准备MediaRecorder的代码 c = Camera.open(); … // Step 1: Unlock and set camera to MediaRecorder camera.unlock(); mediaRecorder.setCamera(camera); // 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) CamcorderProfile […]

使用Google Vision API的媒体记录器

我正在使用Android vision API中的FaceTracker示例。 但是,我在录制video时遇到了困难,同时在它们上面绘制了叠加层。 一种方法是将位图存储为图像并使用FFmpeg或Xuggler将它们合并为video,但我想知道如果我们可以在预计投影时在运行时录制video,是否有更好的解决方案。 更新1:我使用媒体记录器更新了以下类,但录制仍然无法正常工作。 当我调用triggerRecording()函数时抛出以下错误: MediaRecorder:以无效状态调用:4 我在清单文件中有外部存储权限。 更新2: 我在代码中修复了上述问题,并在onSurfaceCreated回调中移动了setupMediaRecorder()。 但是,当我停止录制时,它会抛出运行时exception。 根据文档,如果没有video/音频数据,将抛出运行时exception。 那么,我在这里错过了什么? public class CameraSourcePreview extends ViewGroup { private static final String TAG = “CameraSourcePreview”; private static final SparseIntArray ORIENTATIONS = new SparseIntArray(); static { ORIENTATIONS.append(Surface.ROTATION_0, 90); ORIENTATIONS.append(Surface.ROTATION_90, 0); ORIENTATIONS.append(Surface.ROTATION_180, 270); ORIENTATIONS.append(Surface.ROTATION_270, 180); } private MediaRecorder mMediaRecorder; /** * Whether the app is […]