我尝试制作自定义视频应用程序. iWork仅在清单中使用设置 2.2(API 8). 一切顺利,但我不明白为什么肖像模式视频与Lanscape没有区别. 要检测设备更改方向,我在surfacechanged() 中使用此代码 if (mCamera != null) { Camera.Parameters p = mCamera.getParameters(); try { mCamera.stopPreview(); } catch (Exception e) { // TODO: handle exception } int previewWidth = 0; int previewHeight = 0; if (mPreviewSize != null) { D
以下是关于 mediarecorder 的编程技术问答
我正在研究一个项目,我们需要记录渲染的openGL表面. (例如,如果我们使用glsurfaceview,我们需要与麦克风的音频一起记录表面) 目前,我通过将视频源设置为VIDEO_SOURCE_GRALLOC_BUFFER来使用Mediarecorder API. 我正在使用以下我想知道.... 这是正确的方法吗? .有更好的替代吗? 链接中给出的示例测试正在录制EGLSURFACE的音频和视频,但未正确显示. 可能是什么原因? 真正感谢任何帮助/指针. 谢谢, Satish 解决方案 您引用的代码不是示例,而是行使非公共接口的内部测试代码. SurfaceMediaSource可能会在以后的版本中更改或消失并打破您的代码. 更新: Android 4.3(API 18)允许 MediaRecorder类不进行表面输入,因此,在您的情况下,您需要单独记录音频,然后将其与新的 MediaMuxer class. 更新#2: Andr
我正在使用nodejs和sailsjs在网站上工作. 我的目标是发送由Mediarecorder.ondataavailable事件(将小斑点返回到服务器)和完成录制后构建服务器上的完整文件以存储它的斑点. 在浏览器上,如果我将所有这些小斑点推入数组,然后执行此操作: var blob = new Blob(recordedBlobs, {type: 'video/mp4'}); 我得到可以轻松上传到服务器的完整文件斑点,并且完全可播放. 我正在使用Ajax将所有这些小斑点发送到服务器,在服务器端,我得到的是为了保存本地的小斑点: req.file('recordingPart').upload(async function...) 在我的TMP文件夹上创建文件以存储它,直到我想组装最终文件(我还发送每个部分的索引以了解以后组装的确切顺序). 用户结束录制时,我从前端发送了另一个请求,让我知道何时开始组装文件. 因此,我使用fs.Read
新的Mediarecorder(流[,options]); 我想记录用户摄像机和音频 我需要将Song.mp3混合到录音中的音轨. 和结果导出一个视频文件将通过链接下载. 但是中国订单的第一参数流可以修改? 但是当我使用recoder.stop() 时 it提示错误:无法在" Mediarecorder"上执行"停止":Mediarecorder的状态为"不活动". 我的代码: function getFileBuffer(filepath) { return fetch(filepath, {method: 'GET'}).then(response => response.arrayBuffer()) } function mp3play() { getFileBuffer('song.mp3') .then(buffer => context.decodeAudioD
我正在尝试创建一个每秒钟接受音频斑点的烧瓶端点,然后将其写入波浪文件: 烧瓶: @app.route('/api/v01/post/audio-blob/', methods=['POST']) def api_post_audio_blob(): blob = request.data with open('file.wav', 'ab') as f: f.write(blob) return Response(status=200) javascript: const startButton = document.getElementById("start"); startButton.addEventListener("click", function() { /* Get client-side audio stream */ var constraints = { audio: true }
我可以同时运行两个实例吗?例如 public MediaRecorder mrec1 ; public MediaRecorder mrec2 ; mrec1.setCamera(mCamera); mrec1.setPreviewDisplay(surfaceHolder.getSurface()); mrec1.setVideoSource(MediaRecorder.VideoSource.CAMERA) . . . . mrec2.setAudioSource(MediaRecorder.AudioSource.MIC); mrec2.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mrec2.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); . . . . mrec1.prepare(); mrec2.prepare(); mrec1.start()
我试图在我的三星Galaxy S6(以约30 fps为支持的1920x1080支持1920x1080)上录制后置摄像头(面对面的摄像头).如果我不必这样做,我不想使用任何表面进行预览,因为这只是在后台发生. 我似乎使它起作用,但是输出文件无法以实际正确的方式播放.在我的Windows 10 PC上,Windows Media Player将显示第一帧,然后播放音频,VLC不会显示任何框架.在我的手机上,录制的文件是可播放的,但不是完全.它将将第一个帧保持在5-8秒钟,然后在最后,剩下的时间到0,显示的总时间更改,然后实际的视频帧开始播放.在我的Mac(10.9.5)上,QuickTime不会显示视频(虽然没有错误),但是Google Picasa可以完美地播放它.我想在我的电脑上尝试picasa,看看它是否有效,但是我无法下载Google picasa,因为它已经被日落了. 我尝试为找到的Windows安装一个编解码器包,但没有解决任何问题. MediaInfo V0.7
我试图使用ffmpeg.js将WebM文件转换为MP4. 我正在录制Canvas的视频(带有一些信息的叠加仪),并记录视频中的音频数据. stream = new MediaStream(); var videoElem = document.getElementById('video'); var videoStream = videoElem.captureStream(); stream.addTrack(videoStream.getAudioTracks()[0]); stream.addTrack(canvas.captureStream().getVideoTracks()[0]); var options = {mimeType: 'video/webm'}; recordedBlobs = []; mediaRecorder = new MediaRecorder(stream, options); mediaRecorder.onstop = han
在我的应用程序播放音乐中,用户应该在麦克风中说.您能告诉我如何制作唱片吗?音乐和麦克风的顶级路径.我浏览了Mediarecorder,但我认为没有适当的录音来源. 解决方案 用于通过MIC录制 开始和停止通过麦克风录制.... 开始录制 static MediaRecorder recorder = new MediaRecorder(); static String path, filename, time; static int duration; public void startRecording() { try { recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(M
我使用这样的代码开始了一个项目,对Android麦克风进行实验: mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile(mFileName); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 之后,准备()和start()开始录制麦克风音频. 麻烦是,我还试图添加一些音频处理效果,例如Noisiseuppressor. API文档指出,Noisisupressor已完成此操作: NoiseSuppressor create (int audioSess
使用MediaRecorder时,我们没有低于24的API级别的暂停/简历. 因此,可以有一种方法是: 在暂停事件上停止录音机并创建录制的文件. &on Risume重新开始录制并创建另一个文件并继续这样做,直到用户按下停止. 最后合并所有文件. 许多人问这个问题,但无论如何找不到解决这个问题.人们谈论通过停止在暂停操作中录制并在简历上重新启动来创建多个媒体文件.所以我的问题是我们如何以编程方式合并/加入所有媒体文件? 注意:在我的情况下,MPEG4容器-M4A for Audio和视频MP4. 我尝试使用SequenceInputStream合并相应生成的记录文件的多个输入流.但这总是仅导致第一个文件. 代码段: Enumeration enu = Collections.enumeration(inputStreams); SequenceInputStream sqStream = new Seque
我有一个项目,用户可以在不限制时间的情况下拍摄照片和视频,因此我需要以最低的质量记录. 这是我的代码: Intent takeVideoIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); takeVideoIntent.putExtra(android.provider.MediaStore.EXTRA_VIDEO_QUALITY, 0); if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); } in(MediaStore.extra_video_quality,0);)我使低质量
我正在开发一个音频处理应用程序,需要录制音频,然后对其进行处理以获取该录制的功能.但是,我希望使用MediaPlayer播放可播放格式的音频. 我已经看到,要录制音频来处理它,最好使用AudioreCord,因为我可以从那里获得原始音频.但是然后我无法以可玩格式写入数据(在Android中有任何库可以执行此操作吗?). 我使用此方法记录原始数据,然后将其写入文件: 27/捕获raw-audio-data in-indroid/ 但是,当我尝试在设备上播放此文件时,它是无法播放的. 然后,如果我使用Mediarecorder,我不知道如何解码数据以提取功能.我一直在看MediaExtractor,但是MediaExtractor不会解码帧. 所以..做到这一点的最佳方法是什么?我认为这在任何音频处理应用程序中都是常见的,但是我无法找到管理此操作的方法. 感谢您的答复. 解决方案 使用AudioRecord是正确的方法,如果您需要进行任何类型的处理.要播
当Android设备不支持强制性音频编码器时,您会得到: (x =编码器的数字索引) e/MediaProfiles(4048):找不到给定的音频编码器X A/AUDIOSOURCE(4048):Frameworks/base/Media/libstagefright/audiosource.cpp:58 checkers == 1 ||频道== 2)失败. A/LIBC(4048):致命信号11(sigsegv)在0xdeadbaad(代码= 1) 在本机代码中.没有例外反应.应用程序只是封闭的. 如果有任何方法可以查询Android> 3.x设备 AAC AMR-NB和 AMR-WB 实际受支持吗? 文档( formats.html ) 说这些是核心媒体格式,因此始终得到支持. (主要品牌)的一些实际和普通电话没有. 在一个>和 获得Android设备的支持编解码器 仅适用于API16 = Android 4.1,但所讨论的设备为4.0.x. 它也不列出AMR-NB和A
android Mediarecorder 允许将视频保存到文件(文件或socket)(文件或socket) ): setOutputFile(FileDescriptor fd); setOutputFile(String path) 如何将Videodata保存到OutputStream?它将用于流视频录制. 解决方案 使用 android-specific localserverrer"> localserversocket 似乎是将视频数据作为流的唯一可能的方法.简而言之,您必须: 创建LocalserVersocket实例 使用文件描述符(Mediarecorder.setOutputfile(FileScriptor fd);) 将其设置为Mediarecorder实例 接受连接 从循环中的单独线程中读取字节(如输入流) 另一个想法? 其他解决方案 您可以使用String hostname = "example.com";
我正在尝试在核心Android框架文件中打印日志消息.例如,我尝试在frameworks\base\media\libmediaplayerservice\下MediaRecorderClient.cpp中记录消息.我尝试了LOGV,LOGE,LOGD,printf和__android_log_print,没有任何成功. 我应该使用哪个命令打印日志消息? 解决方案 应该使用日志,但它将打印到logcat而不是系统打印. 示例: Log.d("filter", example text); // filter is any tag you want to use as filter 您可以从窗口显示视图中打开eclipse的logcat->其他 - > android-> logcat 其他解决方案 您收到什么样的错误?如果没有编译,请确保您已包括,也包括在android.mk中: LOCAL_LDLIBS := -llog 如果它编译但没有
我正在研究一个我想: 的项目 加载视频JS并在画布上显示. 使用过滤器更改画布的外观(以及视频). 使用MediaStream Catherestream()方法和Mediarecorder对象记录画布的表面和原始视频的音频. 在HTML视频元素中播放画布和音频的流. 我能够通过调整此WEBRTC演示代码来显示视频元素中的录音: https://webrtc.github.io/samples/src/src/content/capture/canvas-record/ 也就是说,我不知道如何与画布一起录制视频的音频.是否可以从两个不同的来源/元素中创建包含MediaStreamTrack实例的MediaStream? 根据MediaStream API的规格,理论上应该有某种方法来实现这一目标: https://w3c.github.io/mediacapture-main/mediacapture-main/#introduction p> " Medi
我似乎缺少某些东西,因为我不明白为什么在Android文档中 @Override protected void onPause() { super.onPause(); releaseMediaRecorder(); // if you are using MediaRecorder, release it first releaseCamera(); // release the camera immediately on pause event } private void releaseMediaRecorder(){ if (mMediaRecorder != null) { mMediaRecorder.reset(); // clear recorder configuration mMediaRecorder.release(); // release the recorder object mMediaRecorder = null; mCamera.lock(); //
我正在尝试开发一个应用程序,其中包括其用户的视频.因此,如果有的话,我需要用前面摄像头捕获视频. 我构建了一个相机预览,这很好. 我使用Android操作网站来构建Mediarecorder并进行设置. 如果我使用camcorderProfile,我的媒体服务器会在调用start()时死亡. 如果我自己设置编码器,则媒体服务器在start()上都会抛出一个运行时异常,并带有"启动失败:-19"的消息. 我在这里发现了有关此主题的一些问题,但没有一个解决我的问题. 我认为这可能与我不使用背面摄像头这样的事实有关.也许我没有找到合适的纪录片来构建正确的代码.我认为这不仅是我的问题,而且我很乐意获得有关相机使用情况的更多知识. 我的代码如下: 在设置预览的 的onResume() protected void onResume() { super.onResume(); // 1. set up camera preview if(ch