对接大疆上云api---实现直播效果

最近开发无人机需要通过大疆的上云api对接到无人机,但是发现无人机对接时,使用rtmp流进行播放实时画面时无法转成webrtc与大疆前端进行交互sdp,查看之后发现大疆在点击play后,会请求一个

复制代码
http://ip:port/rtc/v1/play/

这个ip是目标流媒体服务器的ip,也就是说我们需要搭建流媒体服务器,很出名的就是ZLM了,但是它是基于c++的,对于我这个javalearner,操作起来还是有很大困难的👿。然后发现了ZLM4J,这个大佬讲zlm进行封装以api的方式进行调用,这个就很对我的胃口了😄,然后发现里面也是一些封装...看不懂。后面又发现了JMediaServer,这个就更好了,完全springboot项目,只需要调用接口就可以,启动起来就是流媒体服务器。不需要像原来一样要搭建ZLMediaKit和ffmpeg了,也不要什么乱七八糟的配置,直接启动项目!!!!

启动后发现

直接初始化启动了RTSP、RTMP、WEBRTC

然后就是重点了!!!!

==============================================================

==============================================================

一、分析大疆上云api的后台逻辑

复制代码
manage/api/v1/live/streams/start

代码里最终 会将rtmp的url中的rtmp替换为webrtc,也就是返回的url格式就是

复制代码
webrtc://ip:7935/live/test

二、大疆得到rtmp的流后会调用一个接口

http://ip:port/rtc/v1/play/ ,也就是说这个才是流媒体交互的sdp。这时候只需要改一下前端,别让它继续访问7935的端口了,让它访问我们流媒体启动端口例如8898,然后在流媒体服务器重新写一个接口

复制代码
    /**
     * 对应大疆无人机视频推拉流
     * @param pcSdp
     * @return
     * @throws IOException
     */
    @ApiOperation(value = "【webrtc】sdp协议交换")
    @PostMapping("/rtc/v1/play/")
    public DeferredResult<ResponseEntity<String>> webrtc2(@RequestBody webrtcParam pcSdp) throws IOException {
        String app = "live";
        String stream = "test2";
        String type = "play";
        String sdp = pcSdp.getSdp();
        DeferredResult<ResponseEntity<String>> out = new DeferredResult<>();
        //webrtc使用的是udp,默认监听8000,不需要设置端口号
        String rtcUrl = StrUtil.format("rtc://{}:{}/{}/{}", config.getRtc_host(), config.getRtc_port(), app, stream);
        IMKWebRtcGetAnwerSdpCallBack imkWebRtcGetAnwerSdpCallBack = createWebrtcAnswerSdpCallback(out);
        ZLM_API.mk_webrtc_get_answer_sdp(null, imkWebRtcGetAnwerSdpCallBack, type, sdp, rtcUrl);
        return out;
    }

先写死测试。。。。。。。

三、开始拉流

掉一下流媒体服务器上的接口

发现这个rtmp就是我们上面大疆返回的url地址,不需要管是webrtc还是rtmp,因为后台逻辑是已经转好了的

四、最后点击一在上云api的 play!!!!

就可以看到直播画面了。

如果没有无人机或者摄像头,就更简单了,直接下载一个ffmpeg,然后就直接将一个本地视频文件推到rtmp服务器就行了。

复制代码
ffmpeg -re -i "F:\tbd\drone\\test.mp4" -c copy -f flv -flvflags no_duration_filesize "rtmp://127.0.0.1:7935/live/test2"
相关推荐
别动我齐刘海9 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
code2cat10 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe10 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码10 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling11 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用11 小时前
Java Web 7-10
java·servlet
蜗牛互联网13 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
SL_staff13 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays101113 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找