zoukankan      html  css  js  c++  java
  • Android视频编码器(1)——CameraYUV送给ffmpeg进行软编码,保存为h264

    http://blog.csdn.net/a992036795/article/details/54020491

    一、目的
    在Android上使用FFmpeg将摄像头采集的YUV裸流编码为h264。
    二、环境准备
    1、使用FFmpeg动态库(这个动态库需要有libx264的实现,否则可能会出现寻找编码器失败异常)。关于如何获得这样的一个动态库可以参考http://blog.csdn.net/a992036795/article/details/53941436
    2、android开发环境(我用的是Android Studio2.2.3) 和最新的ndk。
    三、思路
    1、初始化ffmpeg的一些配置。
    2、调用系统摄像头设置参数使用mCamera.setPreviewCallbackWithBuffer();设置回调接口用来接受YUV数据。
    3、将摄像头获得的YUV数据(默认是NV21)转化成YUV420P格式
    3、将获得的修改后的数据传给编码器,进行编码
    4、输出
    四、流程
    这里写图片描述

    流程基本分三大步
    1、初始化(包括打开输出文件,设置参数,寻找编码器、写入头信息等。)
    2、实时传入数据进行编码
    3、刷帧,并写入尾部信息。释放资源

    我用三个jni方法分别对应这三步:

    /**
     * 初始化。
     *
     * @param destUrl 目标url
     * @param w       宽
     * @param h       高
     * @return 结果
     */
    public static native int init(String destUrl, int w, int h);
    
    /**
     * 传入数据。
     * 
     * @param bytes
     * @param w
     * @param h
     * @return
     */
    public static native int push(byte[] bytes,int w,int h);
    
    /**
     * 停止
     * @return
     */
    public static native int stop();
    

    五、代码

    参考原作者。

  • 相关阅读:
    28. css样式中px转rem
    27.用webpack自搭react和vue框架
    26.webpack 入门
    25.redux回顾,redux中的action函数异步
    24.redux
    23.react-router 路由
    22.2、react生命周期与react脚手架(二)
    22.1 、react生命周期(一)
    21.react 组件通信
    const关键字的作用
  • 原文地址:https://www.cnblogs.com/stnlcd/p/7152217.html
Copyright © 2011-2022 走看看