Android在录制时使用ffmpeg对视频进行编码

时间:2013-07-19 13:44:11

标签: android ffmpeg video-encoding

我想开发一个android应用程序,它允许我连续录制视频并将部分视频上传到服务器而不停止录制。 对于应用程序来说至关重要的是,我可以在不停止视频的情况下录制长达60分钟的时间。

初步方法

申请由两部分组成:

  1. MediaRecorder,可从相机连续录制视频。
  2. 切割器/复制 - 部分:在录制视频时,我必须取出某些片段并将其发送到服务器。 这部分是使用http://ffmpeg4android.netcompss.com/实施的 libffmpeg.so 。我使用了他们的VideoKit Wrapper,它允许我直接使用我需要的任何参数运行ffmpeg。
  3. 我的问题

    我用params

    尝试了ffmpeg命令
    ffmpeg -ss 00:00:03 -i <in-file> -t 00:00:05 -vcodec copy -acodec copy <out-file> 
    
    只要Android的MediaRecorder完成录制,这对我来说非常有用。

    当我执行相同的命令时,MediaRecorder正在录制文件时,ffmpeg将退出并显示错误消息“Operation not allowed”。

    • 我认为错误消息并不意味着android阻止了对文件的访问。我认为ffmpeg需要“moov-atoms”才能在视频中找到合适的位置。

    因此我想到了其他方法(不需要moov-atom):

    1. 使用android创建rtsp流并稍后访问rtsp流。问题是据我所知,android SDK不支持录制到rtsp流。
    2. 也许有可能直接用ffmpeg访问相机(/ dev / video0似乎是一个视频设备?!)
    3. 我读过webm作为流媒体的替代方案,也许android可以录制webm流?!
    4. TLDR:太久没读了:

      我想在录制时使用ffmpeg(libffmpeg.so)访问视频文件。 Fffmpeg退出并显示错误消息“Operation not allowed”

      目标:

      我的目标是录制视频(和音频),并在视频仍在录制时拍摄部分视频并将其上传到服务器。

      也许你可以帮助我解决问题,或者你对如何处理我的问题有其他想法。

      提前多多感谢。

1 个答案:

答案 0 :(得分:0)

您的实时要求可能会导致您远离ffmpeg到webrtc和/或html5。

一些资源;

http://dev.w3.org/2011/webrtc/editor/getusermedia.html(第5条)

https://github.com/lukeweber/webrtc-jingle-client

ondello ..他们有api

而不是原生并试图获取视频流或获取帧缓冲区以获取视频缓冲区中的内容的xcopy,然后复制流管理连接(套接字或分块的http),可能想看看api类型的替代品......