Dante 路由批处理小析

  • 前言

    • 问题
  • routing_batch 主要功能
  • 订阅 批处理
    • 相关说明

      • 备注
  • 发送信道标签 批处理
    • 相关说明

      • 备注
  • 接受信道标签 批处理
    • 相关说明

      • 备注
  • 发送流 批处理
    • 相关说明

      • 备注

前言

使用dante 设备进行路由的时候,官方给出的demo API 接口是点对点提交subscription 。 当网络中的设备和所需要路由的信道快速增加时,点对点的遍历提交subscription 的开发方式就显得有点力不从心。

问题

有没有一种方式可以快速将所有的接受信道直接提交的发送信道上的方法呢?

经过一番调查研究之后,dante SDK 头文件的 routing_batch.h进入了我的视角

下面主要是是对routing_batch.h文件当中的官方说明做个汉化和补充,英文较好的童鞋,请自行绕过

routing_batch 主要功能

routing_batch 提供面向批处理的路由类型和定义。这些功能允许高效的配置设备的多方面功能。批处理功能(和方式)和普通情况下运行路由API略有不同

  • 在发送批处理配置消息之前,routing_batch 是不需要获取设备的性能(capabilities)。然而,如果未获取到设备性能信息,routing_batch API将不提供任何错误检查(用于信道的ID等),或试图更新设备内部状态。请注意,对于远程设备必须优先解决了设备的IP地址问题才能执行批处理操作。
  • API 不会在函数内部拷贝任何由主机应用程序提供的批处理数据。但假定这些信息(传参到API里面的数据)将继续存在并保持有效,直至该请求已经完成。因此,主机应用程序不能改变或释放提供了批处理数据,直到完成回调被称为或主机应用程序已经明确通过功能dr_device_cancel_request()函数取消了请求。此要求是必要的,因为该API为了彻底配置设备可能需要发送和接收的多个消息。

订阅 批处理

aud_error_t
dr_device_batch_subscribe
(
    dr_device_t * device,
    dr_device_response_fn * response_fn,
    dante_request_id_t * request_id,
    uint16_t num_subscriptions,
    dr_batch_subscription_t * subscriptions
);

相关说明

  • 对设备提供批 subscriptions 操作

    *

    • @device 需要配置的设备句柄
    • @response_fn 函数执行完之后的回调函数
    • @request_id 请求标识符
    • @num_subscriptions 批处理的subscriptions 的数量
    • @subscriptions 批处理过程中的subscriptions. 一定不能为空

备注

*API,使用的是subscriptions的指针拷贝(浅拷贝),但没有拷贝数组内容(深拷贝)。在dr_device_batch_subscribe正在处理的过程中,参数指针不能被释放或者修改。否者函数将出现异常。

发送信道标签 批处理

aud_error_t
dr_device_batch_txlabel
(
    dr_device_t * device,
    dr_device_response_fn * response_fn,
    dante_request_id_t * request_id,
    uint16_t num_labels,
    const dr_batch_txlabel_t * labels
);

相关说明

  • 发送信道标签 批处理

    • @device 需要配置的设备句柄
    • @response_fn 函数执行完之后的回调函数
    • @request_id 请求标识符
    • @num_labels 需要批处理的标签数量
    • @labels 批操作中的标签. 一定不能为空

备注:

函数执行过程中,未完成回调之前,请勿修改参数内容(多线程不安全)。请参考dr_device_batch_subscribe的备注说明

接受信道标签 批处理

aud_error_t
dr_device_batch_rxlabel
(
    dr_device_t * device,
    dr_device_response_fn * response_fn,
    dante_request_id_t * request_id,
    uint16_t num_labels,
    const dr_batch_rxlabel_t * labels
);

相关说明

  • 接受信道标签 批处理

    • @device 需要配置的设备句柄
    • @response_fn 函数执行完之后的回调函数
    • @request_id 请求标识符
    • @num_labels 需要批处理的标签数量
    • @labels 批操作中的标签. 一定不能为空

备注:

函数执行过程中,未完成回调之前,请勿修改参数内容(多线程不安全)。请参考dr_device_batch_subscribe的备注说明

发送流 批处理

aud_error_t
dr_device_batch_txflow
(
    dr_device_t * device,
    dr_device_response_fn * response_fn,
    dante_request_id_t * request_id,
    uint16_t num_flows,
    const dr_batch_txflow_t * flows
);

相关说明

流的批处理

  • @device 需要配置的设备句柄
  • @response_fn 函数执行完之后的回调函数
  • @request_id 请求标识符
  • @num_flows 需要批处理的“流”数量
  • @flows “流”句柄. 一定不能为空

备注:

函数执行过程中,未完成回调之前,请勿修改参数内容(多线程不安全)。请参考dr_device_batch_subscribe的备注说明

时间: 2024-11-09 04:56:08

Dante 路由批处理小析的相关文章

Python之美[从菜鸟到高手]--NotImplemented小析

今天写代码时无意碰到NotImplemented,我一愣,难道是NotImplementedError的胞弟,所以稍微研究了一下. NotImplemented故名思议,就是"未实现",一般是用在一些比较算法中的,如class的__eq__,__lt__等,注意NotImplemented并不是异常,所以不能 使用raise,当没有实现时应该是return NotImplemented. 我们可以看看django中的Field的实现, @total_ordering class Fie

Poco logger 日志使用小析

Poco logger 日志使用小析 Poco logger 日志使用小析 日志 logger 库选择 Pocologger 架构简析 步骤一 生成消息 步骤二 写入logger 步骤三 导入channel 步骤四 写文件 使用 h file cpp file main 入口函数 备注 拓展 总结 转载请注明本文链接 日志 在软件开发过程中,为了定位软件运行过程中可能出现的错误,一种常用的做法是在潜在的错误位置,设置防御代码,并且将错误代码执行后的错误信息记录下来,以供后续改进代码提供支持. 在

ASP.NET 异步Web API + jQuery Ajax 文件上传代码小析

该示例中实际上应用了 jquery ajax(web client) + async web api 双异步. jquery ajax post 1 $.ajax({ 2 type: "POST", 3 url: "/api/FileUpload", 4 contentType: false, 5 processData: false, 6 data: data, 7 success: function (results) { 8 ShowUploadControl

tornado模板源码小析

最近对flask的热情有点下降,对tornado有点高涨. 之前在知乎上回答过一个问题,如何理解 Tornado ?,我的回答如下: 1.高性能的网络库,这可以和gevent,twisted,libevent等做对. 提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclient, 在现有http客户端中肯定排第一.可以用来做爬虫,游戏服务器,据我所知业界已有使用tornado作为游戏服务器 2.web框架,这可以和django,f

ArcGIS Earth数据小析

ArcGIS Earth,一款轻量级的三维地球应用.因为工作关系下载试用了半天,正好借这个机会简单研究一下ArcGIS Earth的大概思路,特别是地形数据的组成和影像数据的加载,在这总结整理一下.下面ArcGIS Earth简称为AE. 好了,本文先说点人话,接着上硬菜,最后再上点调味小菜.废话不多,说走就走. 本人用的是官网最新版本,刚好发布一周,界面风格和VS的神似,相信开发人员会有一种似曾相识的感觉.不过安装过程并不顺利,安装过程中提示我安装.Net Framework4.5.2版本及以

Audinate Browse 设备浏览API 小析

前言 调用 软件运行架构 初始化配置阶段 动态刷新监控设备信息 获取设备相关信息 备注 前言 安装完audinate SDK 后,官方提供了若干个demo 供学习使用. 对于C系的api,说真的,没有一个详细的教程或者demo,上手还真的不是那么容易. 在学习的过程总结博客一遍,以供反思. 调用 Audiate的开发机制是基于 apple 公司的 mDNS 协议的,运行机制大致如下 应用层--> API层 -->系统服务层(mDNS) 所以要想正常的运行软件,获取设备的相关信息,前提条件是你必

几个批处理小脚本

在做android测试的时候,有时候写几个简单的批处理,能够对工作有事半功倍之效. 下面列举部分工作过程中遇到的命令,供有需要的朋友们参考. 安装所有应用: @echo off echo 等待设备连接 adb wait-for-device set input=%1 echo 已连接 if "%input%" neq "" ( echo 安装 %input% adb install -r %input% echo %1% 安装完毕 ) else ( for /r %

路由转发小实验

现在有A,B两台主机,中间有Ra,Rb,Rc,Rd四个路由器,目标是实现A,B两台主机互通. 准备工作: 准备工作的部分主要是在VMware部分.由于我们的目的是为了更好的理解路由转发,所以这个可能并没有什么实际意义.下面的所有内容都是基于linux虚拟机进行的操作.让我们 先开始准备工作,由于我们是用系统代替路由器,所以6个linux虚拟机是必须的.为了方便是用网卡来模拟路由器的端口也就是说,除A,B两台主机,其余四台linux虚拟机都是用两个网卡.1.6台linux虚拟机,两台作为主机,四台

Python字典的小析(增删改查)

作为Python的初学者,难免会为了一两个小问题找资料,然而一找资料,发现Python关于字典这方面的解析很少,我在此稍稍解析一下字典的用法和含义,若有不足,望大家批评.(在这我直接以代码形式为大家解析) 先来讲讲我对字典的理解吧 简单粗暴,字典就是键值对,而且是无序的,可控的键值对,并且python中字典可以嵌套字典 一.字典的创建 1.传统的文字表达式 a={'name':'Tom','age':20,'job':'Student'} print a >>> {'name':'Tom