• 视频软编码与硬编码


    视频软编码与硬编码

    视频硬编码和软编码的区别

    在Android系统下视频编码有硬编和软编两种方式。顾名思义,硬编是通过手机提供的硬件模块进行编码;软编就是通过软件程序进行编码。硬编的好处是编码快,不占用CPU资源。缺点是Android机型比较多,坑也比较多。软编正好与硬编相反,优点是无论什么机型都一样处理。缺点则是占用大量CPU资源。

    硬编码、软编码有什么区别,归纳如下。

    一、软编码和硬编码如何区分

           软编码:使用CPU进行编码

           硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等

    二、软编码和硬编码比较

           软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。

           硬编码:性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。

    三、目前的主流GPU加速平台

           Intel、AMD、NVIDIA

    四、目前主流的GPU平台开发框架

           CUDA:NVIDIA的封闭编程框架,通过框架可以调用GPU计算资源。

           AMD APP:AMD为自己的GPU提出的一套通用并行编程框架,标准开放,通过在CPU、GPU同时支持OpenCL框架,进行计算力融合。

           OpenCL:开放计算语言,为异构平台编写程序的该框架,异构平台可包含CPU、GPU以及其他计算处理器,目标是使相同的运算能支持不同平台硬件加速。

           Inel QuickSync:集成于Intel显卡中的专用视频编解码模块。

    Intel视频硬编码

     Intel二代Core i3/i5/i7处理器,支持了Intel Quick Sync技术(英特尔高速视频同步技术),利用CPU进行硬件编码,能大幅度提高编码效率,理想情况相比传统的软件编码提高N倍,同时也远远超过NVIDIA CUDA或者AMD Stream显卡硬件编码的速度。英特尔高速视频同步技术支持AVC(H.264)、VC1、MPEG2三种主流的编码格式,基本主流手持设备都支持这些编码,所以说这项技术对于常“压片”的用户来说,是非常实用的。        

            Intel提供了开发包media-sdk(http://software.intel.com/en-us/vcsource/tools/media-sdk),包含一些头文件,库文件跟例子,其中sample_encode用于开发硬编码。

            例子的的编译需要C++编译器(http://software.intel.com/zh-cn/c-compilers/),编译器可以集成到vc2005以上的版本。

    Android下视频H264编码

    在移动端通过Camera采集到视频数据后,不会直接发送出去。因为采集后的视频数据量非常大,比如 1280x720 分辨率的一帧数据,就有可能达到6M大小(码率越高,图像越清晰)。这6M数据如果送到网上传输,会给网络带来非常大的负担。

    另外,人眼对图像的识别是有限的。拿手机屏幕来说,1K屏与2K屏对于人眼来说是看不出来区别的,视频也是同样的道理。视频的压缩编码技术,通过对视频的有损压缩,减少数据大小。

    视频缩码最常用的是 H264,H265,VP8, VP9等。

    编码结构与方式

    下图是视频编码的结构,结构很清楚。

     

     编码结构图

    介绍一下硬件编码。

    如何获取Camera中采集到的数据

    从Camera获取视频数据有两种方式,一种是通过向Camera设置预览Callback来读取原始数据;另一种高效的方式是通过MediaCodec的Surface获取数据。而第二种更高效,更灵活。很容易从网上找到第一种获取数据的方式,这里介绍第二种方式。

    从Camera获取数据的基本方法如下:

    1. 创建 EGL 环境(如果使用 GLSurfaceView则可省略该步骤)。

    2. 构建 OpenGL ES程序,将原始数据渲染到Surface中。

    3. 生成纹理,并打开Camera预览。

    4. 创建编码器,将编码器中的Surface与EGL关联。

    5. Camera捕获数据后,调用 EGL的swapBuffer方法,就可以拿到数据了。

    视频编码

    视频编码,就是一个死循环不断的从编码器中查询编码状态。如果编码状态大于0, 则说明已经有编好的数据了。

     

    参考连接:

    https://cloud.tencent.com/developer/article/1608313?from=information.detail.linux%E4%B8%8B%E7%9A%84h264%E7%A1%AC%E7%BC%96%E7%A0%81

    http://blog.csdn.net/charleslei/article/details/44599041

    人工智能芯片与自动驾驶
  • 相关阅读:
    win10下安装Anaconda3+keras+tensorflow
    Ubuntu 下安装安装 Anaconda3 与Keras
    ESP32开发之Windows开发环境
    LinuxE2系统刷机后OSCAM安装与读卡器设置
    安德鲁1.2Ku全下125C波(CCTV4K除外)
    安德鲁1.2Ku使用感受
    ubuntu10.04换官方源
    密室逃脱游戏解决方案-森林迷宫-炸弹人等
    Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等
    ESP32 做Web服务器 http Server步骤
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14979766.html
Copyright © 2020-2023  润新知