美文网首页多媒体科技Android 音视频短视频
Android Mp4视频录制:断点续录与回删

Android Mp4视频录制:断点续录与回删

作者: IT陈 | 来源:发表于2018-02-07 11:42 被阅读224次
    年底了,所以没时间;
    年底了,所以有时间。
    

    回顾

    在前两篇文章中,已经介绍了在android上录制视频的流程,及使用opengl添加水印、图片等(水印就是图片),后续会更新更多的视频特效(美颜、模糊等),敬请期待。

    背景

    在录制视频时,可能需要包含多个场景,这就需要支持断点续录;
    同时对于录制效果不好的片段,可能想要删除重新录制,但又不想从头开始,这就需要回删功能。

    断点续录与回删

    第一个想法

    刚开始想实现这个功能时,回顾了一下视频帧写文件的流程,

    源输入 -> 编码器 -> muxer合成
    

    那是否可以在想暂停时设置一个标志位,用于忽略帧数据:
    在编码器阶段暂停:此时会出现帧数据不写了,但屏幕也不更新画面了,原因尚未深究;
    在muxer阶段暂停:此时暂停效果有了,且屏幕更新不受影响;

    以上两种方式都有一个问题,就是最终视频文件中,暂停前后的几帧画面不完整,像卡碟现象。
    而且这种文件无法实现回删功能。

    每个片段单独文件

    上面的方式行不通,那如果把每个片段当成一次正常录制,每次都保存为一个完成的视频文件,这样每个片段内的数据都是正常的,断点续录功能明显已经满足了;
    而对于回删功能,只要录制过程中维持一个文件系列,在这个系列上回退(删除最新的文件)即可;
    最终就是把多个视频文件合成一个。

    版本录制

    每个场景录制保存为一个单独的视频文件,这个就是之前已经实现的视频录制功能。并且所有场景的文件维持在一个系列中。

    录制新场景前:1.mp4 -> 2.mp4
    

    录制新场景

    录制新场景后:1.mp4 -> 2.mp4 -> 3.mp4
    

    回删

    在多场景录制过程得到的文件系列中,删除最后一个文件,即可回退到上上次的场景结尾,如

    回删前:1.mp4 -> 2.mp4 -> 3.mp4
    

    回删一次,变成

    回删后:1.mp4 -> 2.mp4
    

    如此看来,整个过程就相当简单了。

    视频拼接

    这个环节最重要了,网上很多说法是用ffmpeg,对于我们来说,那是“杀鸡用牛刀”,而且我们所有的视频文件在比特率、分辨率、格式等方面都是相同的,不用经过转换操作。
    于是输入搜索关键字“android 视频拼接”,出来了一大堆,最后用了一个纯java代码实现的,码上,成功!

    总结

    整个过程看来,实现方法还是很简单的,而不断的探索过程会让我们有更深的了解。
    源码(https://github.com/ICECHN/VideoRecorderWithOpenGL)近期更新。

    注:后续会更新更多的视频特效(美颜、模糊等),敬请期待。

    相关文章

      网友评论

        本文标题:Android Mp4视频录制:断点续录与回删

        本文链接:https://www.haomeiwen.com/subject/wdeozxtx.html