Articles of android mediarecorder

流Android屏幕

我试图让Truiton ScreenCapture示例,以便使用MediaProjection记录设备屏幕 保存录音时,它可以正常工作 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); String localFilePath = getLocalFilePath(); mMediaRecorder.setOutputFile(localFilePath); mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.prepare(); 然而,当改变使用FileDescriptor时,它不是 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); String hostname = “10.26.100.18”; int port = 2007; Socket socket = new Socket(InetAddress.getByName(hostname), port); ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.fromSocket(socket); LocalServerSocket localServerSocket = new LocalServerSocket(fileDescriptor.getFileDescriptor()); mMediaRecorder.setOutputFile(localServerSocket.getFileDescriptor()); mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.prepare(); 如果不使用LocalServerSocket,则mMediaRecorder.prepare()抛出exception,现在我正在使用它,在mMediaRecorder.getSurface()中的以下方法中获取exception private VirtualDisplay createVirtualDisplay() { return mMediaProjection.createVirtualDisplay(“MainActivity”, DISPLAY_WIDTH, […]

Android捕捉慢动作video

如何在我的应用中捕捉慢动作video? 我试过用 mMediaRecorder.setVideoFrameRate(100); 但如果我使用IllegalStateException设置值20或更多,应用程序崩溃。 我研究了很多。正常video在24到30 fps之间。要看慢动作video,我们需要捕获100-120 fps但设备不允许这样。但是我看到设备中的默认摄像头有一个慢动作选项。游戏商店中的应用程序也很少允许创建慢动作video。我也尝试设置更高的setCaptureRate() ,但也可以捕获普通模式video。在少数地方提到慢动作电影可以通过OpenCV/JavaCV完成库,但我不明白如何使用这些库来捕获Android中的慢动作video?

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; […]