我正在尝试通过本地UNIX套接字从Android摄像头传输视频,并将文件从流到SDCARD写入.一切正常,除了任何播放器都无法播放文件.这是因为Android没有填补文件中的某些空白,因为插座无法寻求.据我了解,在视频流结束后,我需要进行一些修改.我阅读了几篇文章在这里在这里 and 在这里帮助过我.我正在与十六进制编辑器一起学习如何手动进行操作,因此在Android代码中执行同样的操作将是微不足道的. 这是从流中保存的示例文件: https://dl.dropbox. com/u/17510473/sample_not_playable.3gp 任何人都可以修复以使其可玩并告诉他如何做吗? 编辑: i擦除了3GP文件的标题,并按照以下方式写下新的文件: 00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00 33 67 70 34 33 67 70 36 00 00 00 00 然后,我找到了MDAT和MOOV原子的起
以下是关于 android-mediarecorder 的编程技术问答
我正在使用Mediarecorder录制视频.我的代码在2.3.3上正常工作,但在4.0.3上失败. 问题如下:Code Mediarecorder.stop()抛出Runtime Exeption 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 更新 我发现,MediaPlayer在开始后几乎立即报告了一个错误(通过MediaPlayer.OnErrorlistener).错误代码为100(媒体服务器已死),额外-1007. 更新2 准备中Mediarecorder 的代码 c = Camera.open(); ...
我已经开发了一个可以录制视频的应用程序.当录制开始时,视频以旋转方向记录.录制时的视频视图向左翻转.我不知道为什么这样.有人可以帮我解决这个问题吗?我的编码如下: mainActivity.java: import android.app.Activity; import android.media.CamcorderProfile; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import java.io.File; import java.io.IOException; import j
我正在10秒内录制多个小型视频.在创建任何视频之前,我需要一次又一次地准备和启动媒体录音机.因此,每个视频中都有一两个秒的时间滞后. 有什么方法可以避免此时间延迟准备诸如Instagram之类的媒体录音机? public boolean startRecording() { startCamera(); camera.unlock(); int rotation = 0; cameraInfo = new CameraInfo(); Camera.getCameraInfo(cameraId, cameraInfo); if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { rotation = 270; } else { rotation = 90; } mMediaRecorder = new
有什么方法可以使用摄像头API实施慢动作和时间流逝录制? 我尝试使用MediaRecorder设置VideoFrameRate,VideoBitRate VideoCaptureRate,但对我无效. 我已经成功地使用JNI实施了,但我发现它花费了太多时间,也没有优化. 如果您找到其他可用的解决方案,请帮助我. 解决方案 我自己解决了它,并且我正在共享我的工作代码,只是使用摄像机API慢动作和时间播放 启动之前,您必须知道setCaptureRate(double fps) 的定义 设置视频框架捕获率. 这可用于设置与 录制了视频的播放率.此方法还设置了录制 时间流逝.在及时的视频录制中,只有视频是 记录.随着时间的流逝,与音频相关的参数被忽略 录制会话开始,如果应用程序设置了它们. 时间段 根据您的视频框架宽度和高度,您需要使用以下相机配置文件. 从下面的个人资料中选择任何一个,或者您可以根据需要选择其他. profile = Ca
我正在开发一个Android Unity插件,该插件允许用户记录其游戏玩法 我的解决方案的概述: 使用OpenGL FrameBufferObject(FBO)将Unity渲染到此FBO 获取此FBO的屏幕外纹理,然后用于两个目的: 渲染到视频表面 重新绘制到设备屏幕 执行每个帧流程: 绑定我的FBO 将场景渲染到FBO(Unity Code) 解开我的FBO 设置视频表面 配置表面尺寸(仅执行首次执行) 保存EGL状态 使视频表面电流 使用我的FBO的屏幕外纹理绘制视频表面 还原到默认表面 将演示时间设置为视频框架 从视频表面到默认窗口的交换缓冲区 还原EGL状态 使默认表面电流 通知编码器线程已准备好编写 我的问题是录制不好时性能.三星Galaxy S4上的FPS从60降至40.我试图记录渲染操作的执行时间,并认识到影响最大的性能操作是使视频表面当前操作和从视频表面到默认窗口操作交换缓冲区.以下是他们的代码 publ
嗨,我正在使用以下代码在Android上录制音频 myRecorder = new MediaRecorder(); myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); myRecorder.setAudioSamplingRate(44100); myRecorder.setAudioEncodingBitRate(256); myRecorder.setAudioChannels(1); voiceFileName = getFilename(); myRecorder.setOutputFile(voiceFileName); private String getFil
我想在Android中制作演示对象的"即时"屏幕截图.我的演示通常会渲染到虚拟显示器(私有),该显示器由Mediarecorder的表面支持,该显示器是由Mediarecorder设置为录制视频的.将演示文稿录制为视频很棒. mMediaRecorder = new MediaRecorder(); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setOutputFile(getScratchFile().getAbsolutePath()); mMediaRecorder.setVideoEncodingBitR
在Android中,如何在媒体录音机开始之前显示预览表面. 我的应用程序具有视频录制功能,当我导航到视频录制片段时,它显示了黑屏,当我开始使用start button摄像机预览进行录制时,是显示和录制启动. 如何在录制之前开始预览. 我添加了我在片段的OnCreateview()中使用的代码 - surfaceHolder = mySurfaceView.getHolder(); camera = Camera.open(); if(camera!=null){ camera.setDisplayOrientation(90); Camera.Parameters param; param = camera.getParameters(); param.setPreviewFrameRate(20); param.setPreviewSize(176, 144); camera.setParameters(param);
在我的应用程序中,我要实现如果发生任何声音,记录声音的方法. 类似类似的应用程序:说话/p> 那我该怎么办? 是否有任何演示来聆听声音并在任何声音发生时记录它? 解决方案 在您的应用程序中尝试此代码... private int RECORDER_CHANNELS = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; private int RECORDER_SAMPLERATE = 44100; private byte RECORDER_BPP = (byte) 16; private AudioRecord audioRecorder; public void arm() { // Get the minimum buffer size required for the succe
我正在为正在制作的应用程序创建视频捕获活动,并且我想捕获预览框架,以用作播放按钮.我已经在onCreate(...)中设置了SurfaceView,并在SurfaceHolder.Callback中挂上了相机的预览显示: private Callback mSurfaceViewCallback = new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { mSurfaceCreated = false; } @Override public void surfaceCreated(SurfaceHolder holder) { try { mSurfaceCreated = true; mCamera.setPreviewDisplay(mHolder);
我使用媒体录音机类录制语音并将其上传到Web服务器,但我不知道何时将录制语音的文件完全写在SD卡上. 您知道一个可以帮助我找出文件是否保存在SD卡上的界面. 解决方案 您是否不停止自己的录音?好吧,如果我处于像你这样的情况下,我会做的. 创建MediaRecorder对象并设置以下属性: private MediaRecorder myAudioRecorder; String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp"; myAudioRecorder=new MediaRecorder(); myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myAudioRecorder.setOutputFormat(MediaRecorder.Output
在我的应用程序中,有一个功能可以录制语音呼叫,而且效果很好.但是,当对(三星S7,S8)进行测试时,它的工作状况不佳.该应用程序能够仅记录呼叫者的声音,而不是另一端的声音.以下是我要检查的代码,请建议解决方案 MediaRecd = new MediaRecorder(); MediaRecd.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL ); MediaRecd.setAudioChannels(ConstantVariables.audioChannels);//monoRecording MediaRecd.setAudioEncodingBitRate(64); MediaRecd.setAudioSamplingRate(44100); MediaRecd.setOutputForm
我正在使用自动呼叫录音机应用程序,我能够使用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.setMaxDuratio
我有集成的摄像机,允许用户录制时间流逝的视频.当用户录制视频时,有一个取消按钮,该按钮允许用户取消当前录制.我的问题是,如果取消后,我尝试再次录制我获取以下例外 - java.lang.NullPointerException: Attempt to read from field 'int android.media.CamcorderProfile.fileFormat' on a null object reference at android.media.MediaRecorder.setProfile(MediaRecorder.java:423) at xyz.fragments.CameraFragment.prepareFastVideoRecorder(CameraFragment.java:448) at xyz.fragments.CameraFragment.access$2300(CameraFragment.ja
我尝试录制音频,只有音频,并且在Android 4.1.2上遇到此错误,但在4.3: 上却没有. 这是代码: private void startRecord(){ on_record = true; final boolean exists = (new File(Environment.getExternalStorageDirectory() + File.separator + NOTAY)).exists(); if (!exists) {new File(Environment.getExternalStorageDirectory() + File.separator + "Test").mkdirs();} final boolean existAud = (new File(android.os.Environment.getExternalStorageDirectory() + File.separator
从Android 4.1(API级16)开始引入MediaCodec API.这些API支持基本流解码和编码.同样,MediaExtractor API将通过分析媒体流来提供基本的轨道详细信息. 我的问题是,我使用MediaCodec API设置了一个视频编码器,这为我提供了.h264格式编码的文件.我想将.H264文件写入.mp4文件以进行播放/存储/共享目的.我找不到任何适用于Android的.mp4文件写入API.有什么方法可以实现吗? 谢谢 Satish. 解决方案 与Android 4.3(API 18)一样类将RAW H.264流转换为.mp4文件(甚至合并了音频流). 请参阅EncodeAndMuxtest和cameratompegTest源此页面上的示例代码 其他解决方案 可能会使用此.它建议使用其他解决方案 另一种方法是使用ffmpeg(/a>)用于Muxing H264文件到MP4容器.
我正在尝试录制视频,但是在媒体记录开始和媒体记录准备.请帮助我...这是我的代码... private boolean startRecording() { camera.unlock(); try { mediaRecorder = new MediaRecorder(); mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { @Override public void onError(MediaRecorder mr, int what, int extra) { Log.i(TAG, "Error"); } }); second=0; minute=0;
我需要记录视频并保存它,但是我在start()媒体记录器方法上遇到错误:失败-19 (此错误应该是什么?在文档中:() 我第二天正在处理这个错误,我尝试了多个代码(Google教程,英特尔示例,...),我在网上都发现了所有代码,但无法使它们中的任何一个.请帮助我找到引起问题的原因.我什至开始怀疑我的手机(SE Live,WT19I)能够录制视频(但默认的摄像头应用程序正常).真的,请,有人有任何想法我应该尝试/检查/修复? 这是我的录制代码: public boolean record() { // if already recording, return if( recording ) return false; // We are recording recording = true; // log start of the meth