NDI协议移植

一、什么是NDI协议

首页了解NDI是什么意思?
NDI是什么?它是Network Device Interface的简称,是种IP网络设备接口协议。
NDI是使视频兼容产品通过局域网进行视频共享的开放式协议。
NDI协议详解就是在单一的制作环境中,NDI任何设备都可以连接到其他所有设备中,每个信号来源都可以成为目标位置,NDI它将可以灵活获取到任意的信号输入与输出。是一个完全创新的IP工作模式。
Newtek NDI协议
NDI协议能实时通过IP网络对多重广播级质量信号进行传输和接收,同时具有低延迟、精确帧视频、数据流相互识别和通信等特性。
国外很多电视台已经把传统SDI/HDMI的视频传输形式转为NDI网络传输。NDI是一种全新的网络应用领域,简化了系统的信号传输。
NDI在信号、调用、复用,使得系统设计、集成、应用、维护、功能拓展等更加简单和灵活。
NDI的特点:
1、NDI音视频信号在进行NDI编码后,能实时通过IP网络对多重广播级质量信号进行传输和接收。
2、同时具有低延迟、精确帧视频、数据流相互识别和通信等特性。
NDI应用场景:
NDI可以直接热靴摄像机,可将SDI或HDMI视频源编码成NDI协议流,通过有线网络或无线WIFI网络进行视频传输,通过有线网络或无线WIFI网络进行视频传输,减少布线成本和部署时间,很好地满足演播室、现场多机位视频制作等需求。
NDI编码器优势:
内置5G加强WIFI模块,可实现更加稳定的无线传输,同时支持USB扩充有线网络传输;
内置大容量锂电池供电,亦支持5-16v外置移动电源供电,无需考虑有线供电问题;
主动散热设计(内置风扇),适应高温工况,运行稳定可靠;
便携小巧,仅重380g,自带热靴,便于摄像机一体化安装;
支持使用手机/PAD端APP实现无线远程管理,操作便捷;
支持双码流输出,主码率支持1080p60Hz的视频编码,子码流支持720 p 60Hz的视频编码,可同时推流到两个平台;
自带SD/TF卡槽,支持本地录制,同时支持NAS网络存储;
支持1080p60Hz视频格式,输出分辨率可自定义;
采用进口芯片及H.264视频编码技术,同时结合视频动态降噪、图像增强等技术处理,可实现低码率编码并能保证高清画质;

二、NDI协议移植 

在写这编之前我有在网上查过资料但是基本上没找到相关资料,给官方写邮件,磕磕绊绊终于移植成功了。写下这编博文是想希望后面有相关需求的人有些借鉴资料少走弯路。

NDI移植的关键点是dbus和avahi的移植。只要移植好dbus和avahi配置对就能运行NDI的例子了。
在移植前我们需要下载以下软件包 ,大家可以自己下载也可以使用我提供的软件包,

avahi-0.7.tar.xz   
dbus-1.12.16.tar.xz 
expat-2.2.9.tar.xz  
libdaemon-0.14.tar.xz
libcap-2.25.tar.xz 

2.1) expat移植

expat的移植很简单,就是configure,make,make install三部曲。configure可以参照我的配置:

 

#!/bin/bash
./configure \
    CC=arm-hisiv300-linux-gcc \
    CXX=arm-hisiv300-linux-g++ \
    --host=arm-hisiv300-linux \
    --prefix=$(pwd)/_hisiv300_install \
    ac_cv_func_setpgrp_void=yes\
    --enable-shared=no\
    --enable-static=yes\

 

需要加上 ac_cv_func_setpgrp_void=yes不然会报错。

2.2) libdaemon移植

libdaemon移植也是configure,make,make install就可以了。configure可以参照我的配置:

 

#!/bin/bash
./configure \
    CC=arm-hisiv300-linux-gcc \
    CXX=arm-hisiv300-linux-g++ \
    --host=arm-hisiv300-linux \
    --prefix=$(pwd)/_hisiv300_install \
    ac_cv_func_setpgrp_void=yes\

 

2.3) libcap移植

make -j8 CROSS_COMPILE=arm-hisiv300-linux-
make DESTDIR=/home/softwares/libcap-2.25/_hisiv300_install install

2.4) dbus移植

在libdaemon移植的时候我们可以先用--prefix=$(pwd)/_hisiv300_install选项在一个目录下面编译出libdbus-1.so以便后面我们编译 avahi的时候使用,再去掉—prefix=$(pwd)/_hisiv300_install,这样我们把 dbus-daemon放到板子上的时候就没有路径问题了。

 

#!/bin/bash
./configure \
    CC=arm-hisiv300-linux-gcc \
    CXX=arm-hisiv300-linux-g++ \
    --host=arm-hisiv300-linux \
    --enable-systemd=no\
    --enable-selinux=no\
    --enable-tests=no\
    EXPAT_CFLAGS="-I/home/softwaves/expat-2.2.9/_hisiv300_install/include"\
    EXPAT_LIBS="/home/softwaves/expat-2.2.9/_hisiv300_install/lib/libexpat.a"\
    --with-session-socket-dir=/var/run/dbus\
    --with-system-socket=/var/run/dbus/system_bus_socket\
    --with-system-pid-file=/var/run/dbus/pid\
    #--prefix=$(pwd)/_hisiv300_install\

2.5) avahi移植

avahi移植起来比较困难 (至少在我看来)。因为在我进行./configure的时候不论怎么设置都提示找不到expat,有知道的大佬可以分享一下。所以我手动改了configure之后的生成的avahi-daemon/Makefile文件。

#!/bin/bash
./configure \
    CC=arm-hisiv300-linux-gcc \
    CXX=arm-hisiv300-linux-g++ \
    --host=arm-hisiv300-linux \
    --disable-libevent \
    --disable-qt3 \
    --disable-qt4 \
    --disable-mono \
    --with-distro=none \
    --disable-glib \
    --disable-gobject \
    --disable-gtk \
    --disable-gtk3 \
    LIBDAEMON_CFLAGS="-I/home/softwaves/libdaemon-0.14/_hisiv300_install/include" \
    LIBDAEMON_LIBS="/home/softwaves/libdaemon-0.14/_hisiv300_install/lib/libdaemon.a"\
    --with-xml=none\
    --disable-gdbm\
    --disable-python\
    --disable-python-dbus\
    ac_cv_header_sys_capability_h=yes \
    #--prefix=$(pwd)/_hisiv300_install \

 

avahi-daemon/Makefile修改内容如下,请修改为自己的路径

 View Code

至此已经完成所有库的移植。
3. 配置
    在ntfs下面运行编译生成的dbus-daemon,会提示找不到配置,把配置拷的板子相关目录,并把编译avahi生成的share/dbus-1/interfaces拷到dbus-daemon的配置目录下面。以下是我的操作,
    生成的dbus配置:

 生成的avahi,share/dbus-1/interfaces:

 考到板子如下:

把生成的so文件拷贝到板子上并添加相应软链接,需要拷贝的so文件有:


    libavahi-client.so.3.2.9
    libavahi-common.so.3.5.3 
    libavahi-core.so.7.0.2
    libdbus-1.so.3.19.11

添加dbus-daemon和avahi-daemon用户:


    adduser avahi -D -H
    adduser messagebus -D -H

到现在为此dbus-daemon和avahi-daemon应该能跑起来了。

4. 运行NDI例子
    当然你NDI的SDK大家到NDI官网下载就可以了,下载解压是一个shell脚本,运行之后会生成头文件库文件例子等等,把NDI的examples编译出来,比如我的编译命令是
make NDILIB=arm-hisiv300-linux CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++
需要注意的是有编译出来的可执行文件可能会报错,需要在Makefile.proj里面添加
CXXFLAGS += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
    在运行NDI之前先运行dbus-daemon和avahi-daemon

好了我们可以运行NDI例子了比如NDIlib_Send_HEVC

至此NDI的整个移植算完成了。

 下载链接

官网:https://www.ndi.tv/

 

 

 

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值