神奇的LinkLib,42行代码搞定Hi3531D/Hi3521D采集,编码压缩,输出RTMP网络流

LinkLib 专栏收录该内容
25 篇文章 0 订阅

本文镜像:https://www.linkpi.cn/archives/439
本文链接:https://blog.csdn.net/weixin_45326556/article/details/95302329

神奇的LinkLib,42行代码搞定Hi3531D/Hi3521D采集,编码压缩,输出RTMP网络流

描述

    海思的芯片功能越来越强大,性能越来越高,性能比已经把国外的同类芯片甩了好几条街。但海思的SDK相对偏向硬件的,对软件人员不算很友好,尤其是初学者,面对纷繁复杂的各种结构体,更是无从下手;网上也有人吐槽说连视频采集时信号采样率是单沿还是双沿都需要软件人员指定,这对于纯软件人员来说,那是一脸懵。想起造就普及型手机辉煌时代的联发科,他们不仅做了芯片,还把软件全都给做了,用户拿回去套个壳就能出货了。灵派科技也许受到了联发科的启发,他们开发了LinkLib,对海思的SDK进行了高度封装,并把海思SDK并不提供的视音频合成(MUX),还有网络流输出,以及各种视频叠加(OSD)等等都加入了LinkLib。灵派科技还提供了基于LinkLib开发的高清编码器,并公开了高清编码器源代码(包括前台和后台的代码),客户可以直接拿高清编码器的源代码进行修改成自己的产品,或者直接改个LOGO就直接出货也是可行的。

代码示例

    下面这42行代码就轻松实现了音视频采集,并对视频进行H264编码压缩,对音频进行AAC编码压缩,然后输出RTMP网络流。如果是在海思SDK上进行开发,没有上万行代码,是搞不定的;海思的sample_venc.c代码行就有1500,这个例子只是处理视频采集压缩,但并没有处理音频,更不会帮你处理视频和音频的同步问题,网络流输出更无从谈起。因此LinkLib确实大大减少了偏底层的开发工作量,让软件人员专注于业务逻辑。

#include <QCoreApplication>
#include "Link.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Link::init();

    LinkObject *vi=Link::create("InputVi");
    QVariantMap dataVi;
    dataVi["interface"]="HDMI-A";
    vi->start(dataVi);

    LinkObject *ai=Link::create("InputAi");
    QVariantMap dataAi;
    dataAi["interface"]="HDMI-A";
    ai->start(dataAi);

    LinkObject *encv=Link::create("EncodeV");
    QVariantMap dataEncV;
    dataEncV["codec"]="h264";
    dataEncV["bitrate"]=2000;
    dataEncV["width"]=1280;
    dataEncV["height"]=720;
    encv->start(dataEncV);

    LinkObject *enca=Link::create("EncodeA");
    QVariantMap dataEncA;
    dataEncA["codec"]="aac";
    dataEncA["bitrate"]=128000;
    dataEncA["samplerate"]=48000;;
    enca->start(dataEncA);

    LinkObject *mux=Link::create("Mux");
    QVariantMap dataMux;
    dataMux["path"]="rtmp://127.0.0.1/live/test";
    mux->start(dataMux);

    vi->linkV(encv)->linkV(mux);
    ai->linkA(enca)->linkA(mux);

    return a.exec();
}

参考

开源高清编码器源代码https://gitee.com/LinkPi/Encoder
开源高清编码器使用说明书: https://blog.csdn.net/weixin_45326556/article/details/94453630
开源高清编码器基于LinkLib编写,LinkLib API说明参见:https://gitee.com/LinkPi/LinkLib/wikis/pages
开源高清编码器评估板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-18827270222.6.fa7e6ffdktaeqz&id=579544624529

  • 2
    点赞
  • 2
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
mpeg4编码库源代码C++完整源代码有需要饿同学尽管拿去。 // This is the header file describing // the entrance function of the encoder core // or the encore ... #ifdef __cplusplus extern "C" { #endif typedef struct _ENC_PARAM_ { int x_dim; // the x dimension of the frames to be encoded int y_dim; // the y dimension of the frames to be encoded float framerate;// the frame rate of the sequence to be encoded long bitrate; // the bitrate of the target encoded stream long rc_period; // the intended rate control averaging period long rc_reaction_period; // the reation period for rate control long rc_reaction_ratio; // the ratio for down/up rate control long max_key_interval; // the maximum interval between key frames int max_quantizer; // the upper limit of the quantizer int min_quantizer; // the lower limit of the quantizer int search_range; // the forward search range for motion estimation } ENC_PARAM; typedef struct _ENC_FRAME_ { void *image; // the image frame to be encoded void *bitstream;// the buffer for encoded bitstream long length; // the length of the encoded bitstream } ENC_FRAME; typedef struct _ENC_RESULT_ { int isKeyFrame; // the current frame is encoded as a key frame } ENC_RESULT; // the prototype of the encore() - main encode engine entrance int encore( unsigned long handle, // handle - the handle of the calling entity, must be unique unsigned long enc_opt, // enc_opt - the option for encoding, see below void *param1, // param1 - the parameter 1 (its actually meaning depends on enc_opt void *param2); // param2 - the parameter 2 (its actually meaning depends on enc_opt // encore options (the enc_opt parameter of encore()) #define ENC_OPT_WRITE 1024 // write the reconstruct image to files (for debuging) #define ENC_OPT_INIT 32768 // initialize the encoder for an handle #define ENC_OPT_RELEASE 65536 // release all the resource associated with the handle // return code of encore() #define ENC_OK 0 #define ENC_MEMORY 1 #define ENC_BA
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值