EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互

article/2025/9/24 16:48:06

    EasyDarwin提供了接口供客户端使用,以实现客户端与其的交互。比如,根据EasyDarwin的8.1.0版本的接口文档,有获取推流列表的接口如下所示:

 

    我们可以测试一下上述接口。首先启动EasyDarwin服务器,启动后在浏览器(比如QQ浏览器中)输入“http://127.0.0.1:10008/api/v1/pushers”(格式为:'流媒体服务器所在电脑的IP' : 'easydarwin.ini中设置的http端口号' + '接口消息'),输入后按回车,可以看到浏览器显示如下信息。因为目前没有在推流,所以显示的信息如下所示,total为0,rows也没有。这些显示的信息就是EasyDarwin服务器收到浏览器发给它的"api/v1/pushers"消息后返回的响应。可以看到这个接口是正常的。

接下来我们以获取推流列表为例子,根据上述接口编写C++客户端。在vs2015中新建控制台程序,输入如下代码。代码参考《C++ 一个简单的实现HTTP GET和POST请求的类》

HttpRequest.h

#pragma once
#include <string>
#include <vector>class HttpRequest
{
public:HttpRequest(const std::string& ip, int port);~HttpRequest(void);std::string HttpGet(std::string req);  //进行Http的GET请求
private:std::string m_ip;   //需要连接的http服务器的IPint m_port;         //需要连接的http服务器的端口号
};

 

HttpRequest.cpp

#include "HttpRequest.h"
#include <WinSock.h>
#include <iostream>#pragma comment(lib, "ws2_32.lib")HttpRequest::HttpRequest(const std::string& ip, int port) : m_ip(ip), m_port(port)
{
}HttpRequest::~HttpRequest(void)
{
}//进行Http的GET请求
std::string HttpRequest::HttpGet(std::string req)
{std::string ret = "";     //返回Http的Response(响应)try{/*进行socket初始化*/WSADATA wData;::WSAStartup(MAKEWORD(2, 2), &wData);SOCKET clientSocket = socket(AF_INET, 1, 0);struct sockaddr_in ServerAddr = { 0 };ServerAddr.sin_addr.s_addr = inet_addr(m_ip.c_str());ServerAddr.sin_port = htons(m_port);ServerAddr.sin_family = AF_INET;int errNo = connect(clientSocket, (sockaddr *)&ServerAddr, sizeof(ServerAddr));  //连接服务器if (0 == errNo)                            //如果成功连接上服务器{std::string strSend = " HTTP/1.1\r\n""Host: 192.168.1.104:10008\r\n""Connection: keep-alive\r\n""Cache-Control: max-age=0\r\n""Upgrade-Insecure-Requests: 1\r\n""User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400\r\n""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n""Accept-Encoding: gzip, deflate\r\n""Accept-Language: zh-CN,zh;q=0.9\r\n""Cookie: token=42C0EN0ZR\r\n\r\n";strSend = "GET " + req + strSend;errNo = send(clientSocket, strSend.c_str(), strSend.length(), 0);   //发送缓冲区strSend中的信息给服务器if (errNo > 0){std::cout << "发送成功" << std::endl;}else{std::cout << "发送失败" << std::endl;//std::cout << "errNo:" << errNo << std::endl;return ret;}int buf_size = 5000;char *bufRecv = new char[buf_size]();   //申请buf_size大小的空间并初始化为0,将指针bufRecv指向该空间errNo = recv(clientSocket, bufRecv, buf_size, 0);if (errNo > 0)           // 如果接收响应成功,则返回接收的数据内容{ret = bufRecv;        delete[] bufRecv;}else                     //如果接收响应失败{std::cout << "接收失败" << std::endl;delete[] bufRecv;//std::cout << "errNo:" << errNo << std::endl;return ret;}}else        //如果连接不上服务器{errNo = WSAGetLastError();std::cout << "errNo:" << errNo << std::endl;}// socket环境清理::WSACleanup();}catch (...){return "";}return ret;
}

 

main.cpp

#include "HttpRequest.h"
#include <iostream>
#include <Windows.h>int main(int argc, char *argv[])
{HttpRequest httpReq("127.0.0.1", 10008);std::string res = httpReq.HttpGet("/api/v1/pushers");std::cout << res << std::endl;return 0;
}

 

输入代码完成后,编译,运行,可以看到控制台输出如下,证明客户端获取EasyDarwin的推流列表成功了。

 

这里要注意一个问题,如果在客户端中,仅仅发消息“Get /api/v1/pushers”给服务器是无法成功获取响应的,还得发HTTP头。使用Wireshark对客户端发送的数据进行抓包,可以看到发送的数据如下所示,可以看到除了“Get /api/v1/pushers”,还发了很多其它东西。

 


http://chatgpt.dhexx.cn/article/ChjijSEh.shtml

相关文章

EasyDarwin的交叉编译

easyDarwin的交叉编译 前言一、EasyDarwin简介二、配置环境介绍三、交叉编译过程1.go环境的搭建2.编译 后记 前言 最近项目有个需求是在嵌入式设备中运行一个RTSP服务器&#xff0c;满足推流到该服务器后&#xff0c;其他终端设备能够从这个RTSP服务器中拉RTSP流出来。找来找去…

EasyDarwin 流服务器搭建及相关软件教程

一、产品 运行 exe 文件 启动 服务器 双击 运行 EasyDarwin.exe 会出现如下界面&#xff1a; 在 浏览器打开 http://192.168.10.80:10008 2.解压ffmpeg 添加环境变量&#xff1a;复制C:\SoftWare\ffmpeg-6.0-essentials_build\bin路径&#xff0c;添加环境变量中 的用户变…

EasyDarwin —— ubuntu搭建rtsp服务,使用FFmpeg进行rtsp推拉流

开源流媒体服务器 EasyDarwin是由国内开源流媒体团队开发和维护的一款开源流媒体平台框架&#xff0c;从2012年12月创建并发展至今&#xff0c;从原有的单服务的流媒体服务器形式&#xff0c;扩展成现在的云平台架构的开源项目&#xff0c;更好地帮助广大流媒体开发者和创业型企…

EasyDarwin测试

EasyDarwin是由国内开源流媒体团队维护的一款开源流媒体平台框架&#xff0c;开发语言是go语言。本文主要使用它作为RTSP服务器使用&#xff0c;并以此进行测试。方便之后记录。 &#xff08;1&#xff09;软件获取&#xff08;自行下载&#xff0c;具体代码编译方式&#xff0…

流媒体开发之EasyDarwin搭建rtsp server

0 背景 EasyDarwin 旭帆科技开源的流媒体服务器软件&#xff0c;EasyDarwin 社区专注于传统安防&#xff08;RTSP/RTP/Onvif&#xff09;流媒体技术&#xff0c;能够帮助开发者快速搭建流媒体服务平台&#xff0c;更快、更简单地实现流媒体直播与点播功能。本文主要介绍 rtsp …

EasyDarwin ffmpeg+EasyDarwin开源流媒体服务器平台试用笔记(视频流rtsp)

服务 Github https://github.com/EasyDarwin/EasyDarwin , server will invoking ffmpeg. 1. download server 下载EasyDarwin-windows-8.1.0-1901141151 双击EasyDarwin.exe 访问http://127.0.0.1:10008/#/ 2. download FFmpeg 下载FFmpeg : https://github.com/BtbN…

从零开始搭建EasyDarwin环境——linux系统共享目录实现

EasyDarwin是一款高性能开源RTSP流媒体服务器&#xff0c;基于Go语言研发&#xff0c;维护和优化&#xff1a;RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、Web后台管理、分布式负载均衡。EasyDarwin从最初的c到后面的nodejs再到现在…

使用EasyDarwin搭建Rtsp Server从大华摄像头拉流进行多路分发

使用EasyDarwin搭建Rtsp Server从大华摄像头拉流进行多路分发 问题服务搭建推流命令大华摄像头配置 问题 大华摄像头&#xff08;型号&#xff1a; DH-IPC-HDW1235C-A 2.8MM 200万高清网络摄像机 &#xff09;目前支持20路连接&#xff0c;实际使用测试过程中&#xff0c;只能…

EasyDarwin —— windows搭建rtsp服务,使用FFmpeg进行rtsp推拉流

开源流媒体服务器 EasyDarwin是由国内开源流媒体团队开发和维护的一款开源流媒体平台框架,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目,更好地帮助广大流媒体开发者和创业型企业快速构建流媒体服务平台,更快、更简单地…

简单的流媒体服务器(EasyDarwin的安装搭建)

再项目中需要用到简单的视频播放&#xff0c;想着干脆搭建一个流媒体服务器&#xff0c;后期做视频点播 直播包括视频服务器的负载&#xff0c;所以索性开始自己探索搭建视频流媒体服务器&#xff0c;用于存储和传输视频资源 相关概念 流媒体 流媒体&#xff08;Streaming Me…

【ZYNQ】ZYNQ7000 私有定时器及其驱动应用示例

定时器简介 在 ZYNQ 嵌入式系统中&#xff0c;定时器的资源是非常丰富的&#xff0c;每个 Cortex-A9 处理器都有各自独立的 32 位私有定时器和 32 位看门狗定时器&#xff0c;这两个 CPU 同时共享一个 64 位的全局定时器&#xff08;GT&#xff09;。 系统框图 私有定时器 特…

ZYNQ开发系列——使用AXI4LITE接口进行PS和PL交互

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——使用AXI4LITE接口进行PS和PL交互 前言PS端AXI接口AXI4LITE slave模块的设计后记前言 前面我们讲到使用AXI4LITE来作为总线接口来实现PS和PL的交互。同时我们为了支持《从零开始研发GPS接收…

Xilinx ZYNQ简介

ZYNQ 是赛灵思公司&#xff08;Xilinx&#xff09;推出的新一代全可编程片上系统&#xff08;APSoC&#xff09;&#xff0c;它将处理器的软件可编程性与 FPGA 的硬件可编程性进行完美整合&#xff0c;以提供无与伦比的系统性能、灵活性与可扩展性。与传统 SoC解决方案不同的是…

ZYNQ ARM核之SCU

Snoop Control Unit&#xff0c;窥探控制单元&#xff0c;详情见UG585。SCU主要是解决ARM的L1和L2的缓存协调(因为两个processor的缓存是共用的)和AXI总线的ACP存取的,也就是DMA等高速中断需求的外设。 SCU 块将两个 Cortex-A9 处理器连接到内存子系统&#xff0c;并包含智能管…

ZYNQ开发系列——PS开发之HelloWorld

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——PS开发之HelloWorld 前言外设接口SDK建立工程相关操作记录前言 俗话说一日不见,如隔三秋。两年没搞PS的开发,居然连HelloWorld怎么出来都不记得了,可见知识记录的重要性,知识真的是有保…

ZYNQ开发系列——PS响应PL中断请求

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——PS响应PL中断请求 前言中断的设置PS部分代码前言 PS和PL的交互中,还有一个中断没有讲到,在《从零开始研发GPS接收机连载》中,将会有两个中断,一个中断是505us中断,一个中断是10ms中断…

ZYNQ PS简介

ZYNQ 实际上是一个以处理器为核心的系统&#xff0c;PL 只是它的一个外设。Zynq-7000 系列的亮点在于它包含了完整的 ARM 处理器系统&#xff0c;且处理器系统中集成了内存控制器和大量的外设&#xff0c;使 Cortex-A9 处理器可以完全独立于可编程逻辑单元。而且实际上在 ZYNQ …

Zynq-7000 AMP运行模式下的软件切换及多版本固化运行

Zynq平台AMP运行模式下的软件切换及多版本固化运行 1. Zynq双裸核AMP运行环境构建 1 1.1 Zynq架构概要 1 1.2 Zynq启动与配置 2 1.2.1 启动流程概述 3 1.2.2 PS硬件启动阶段 3 1.2.3 PS软件启动阶段 4 1.2.4 启动文件构成 4 1.2.5 启动模式 4 1.2.6 BootROM的执行 5 1.2.7 FSB…

ZYNQ-定时器中断使用

学习内容 本文首先介绍了ZYNQ的定时器的相关内容&#xff0c;并学习使用ZYNQ芯片中的定时器进行操作测试。 开发环境 vivado 18.3&SDK&#xff0c;PYNQ-Z2开发板。 定时器简介 介绍 ZYNQ有两个Cortex-A9处理器&#xff0c;每个Cortex-A9处理器都有自己的专用32位计时…

zynq-1

https://www.youtube.com/watch?vVs0h0kue7p4&listPL4D6H9w4Ihdp0YRExoQXfbVMRL1GgEPCm