对接大疆上云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"
相关推荐
ayt00714 分钟前
Netty 4.2核心类解析:SingleThreadIoEventLoop的设计哲学与实现
java·网络
无名-CODING16 分钟前
Java 爬虫进阶:动态网页、多线程与 WebMagic 框架实战
java·爬虫·okhttp
weixin_7042660518 分钟前
Spring 注解驱动开发与 Spring Boot 核心知识点梳理
java·spring boot·spring
开开心心就好18 分钟前
伪装文件历史记录!修改时间的黑科技软件
java·前端·科技·r语言·edge·pdf·语音识别
8Qi821 分钟前
Redis哨兵模式(Sentinel)深度解析
java·数据库·redis·分布式·缓存·sentinel
wangchunting28 分钟前
数据结构-树
java·数据结构
无籽西瓜a31 分钟前
【西瓜带你学设计模式 | 第五期 - 建造者模式】建造者模式 —— 产品构建实现、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·建造者模式
wzl2026121334 分钟前
《基于企微会话存档的精准发送策略:从互动数据分析到防折叠群发》
java·数据分析·企业微信
xhuiting1 小时前
MySQL专题总结(四)—— 高可用
java·数据库·mysql
不吃蘑菇!1 小时前
LeetCode Hot 100-1(两数之和)
java·数据结构·算法·leetcode·哈希表