非得逼我出来摆地摊你们才知道LinkSDK仅42行代码能做啥

雷军曾经说过:站在风口上,猪都可以飞起来。,现在什么风口,那要属摆地摊,但我们的设备能是地摊货吗,非也,但我不得不响应雷军的号召,来吆喝几句:
走过路过的朋友们,瞧一瞧,看一看了啊,直播设备亏本大甩卖了啊,不买也来摸一摸,这年头不摸下地摊货,就是OUT了啊,下面我就来介绍下这个非地摊货的直播设备了。
如果大家还不熟悉我们的直播设备,可以进到以下链接:
https://blog.csdn.net/weixin_41486034/article/details/106240240
https://blog.csdn.net/weixin_41486034/article/details/106351578
https://blog.csdn.net/weixin_41486034/article/details/106563286

原来我们的设备真的是很强大,居然还能二次开发啊,这哪是什么地摊货啊,下面我就来介绍下LinkSDK仅42行代码能做啥

描述

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

代码示例

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

#include 
#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://gitee.com/LinkPi/Encoder/wikis/pages
开源高清编码器基于LinkLib编写,LinkLib API说明参见:https://gitee.com/LinkPi/LinkLib/wikis/pages
开源高清编码器评估板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22796185904.12.5f005504YajIDM&id=619720369822

在 JavaScript 中,我们可以使用对象字面量来定义对象,例如: ``` const obj = { name: 'John', age: 30, job: 'developer' }; ``` 这种方式虽然简单,但有时可能无法满足我们的需求。如果我们想要在对象中定义一些方法,以便在其他地方调用,我们可以使用函数来实现。例如: ``` const obj = { name: 'John', age: 30, job: 'developer', sayHello: function() { console.log('Hello, my name is ' + this.name + '.'); } }; ``` 这样我们就定义了一个对象 obj,其中包含了一个名为 sayHello 的方法。我们可以在其他地方调用这个方法,例如: ``` obj.sayHello(); // 输出 "Hello, my name is John." ``` 另一方面,箭头函数是 ES6 中的新特性,它们可以简化函数的书写,并且具有更简洁的语法。在箭头函数中,可以使用对象字面量来定义对象,例如: ``` const obj = () => ({ name: 'John', age: 30, job: 'developer' }); ``` 这里的箭头函数返回了一个对象字面量,其中包含了三个属性。需要注意的是,如果箭头函数直接返回一个对象字面量,而不加括号,那么解析器会将大括号解析为函数体的大括号,而不是对象字面量的大括号。因此,为了避免这种情况,我们需要在对象字面量外面加上一个小括号,表示返回的是一个对象字面量。 综上所述,我们不一定非得在 JavaScript 中使用箭头函数来定义对象,可以使用传统的对象字面量和函数来实现。但是,如果我们想要使用简洁的语法来定义对象,可以考虑使用箭头函数来返回对象字面量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值