2013-04-23 118 views
6

我目前使用onPreviewCallback,因此我可以在预览时捕获摄像头的帧并通过http进行流式传输。在录制视频时保持预览回调?

这一工程,但后来我发出命令开始录制和,看来,我没有预览回调了。

那么,我该如何保持预览回调,所以我可以同时发送从表面框架到我的服务器和记录设备上的视频?

回答

5

我在Android Camera上工作了很长时间。然而,当您正在录制

我记得

1)onPreviewCallback不叫它在几个问题中提到:

Camera onPreviewFrame not called How to show real time filtered camera preview while recording videos?

2)我看到它是处理在SipDroid和情侣以下方式其他Android SIP客户端的(这是一个1-2年前,所以这种方法可能是outdates):

  • 的管被创建
  • 接收到该管的插座被包裹在的FileDescriptor并传递给MediaRecorder setOutputFile
  • 发送管的插座中的螺纹不断读出。
  • 这样你就可以收到一个写入文件的内容
  • 现在,如何处理内容的问题(因为,它的H.263或H.264编码,并可能与声音混合,如果你用声音录制视频)。
  • 有其解析的内容(然而,这是痛苦的屁股)

3)您可以使用onPreviewFrame +启动AudioRecorder和自己进行编码(使用ffmpeg的或类似的东西)的MP4一些启发式算法文件。这样您就不需要启动MediaRecorder录音。

1

一旦我的相机和MediaRecorder启动并没有崩溃停止记录(不容易),如你所说,在预览回调将停止获取调用我仍然有一个问题。

我终于找到了修复程序将调用mediaRecorder.start()后setPreviewCallback,另有mediaRecorder.stop后()。不知道这是否正确,但它对我正在测试的Razr M有效。

2

你可以叫你的媒体recorder.start后,这些方法()被调用如下:

camera.reconnect(); 
camera.setPreviewCallback(); 
surfaceview.getHolder().addCallback(); 

的原因:

  1. camera.unlock后()被调用,另一个进程(这里是媒体记录过程)可以使用相机;过程完成后,您必须重新连接相机,相机将重新获取锁定并允许您继续使用相机。
  2. 然后照相机 重新连接后重新注册surfaceview帧数据回调,因为重新连接后的状态的一些可以改变。

我曾经在你的应用程序中遇到同样的问题,我通过这个来解决它。希望它能解决你的问题!