在2013年上半年接手DM365、DM368的IPNC(网络摄像机)产品的收尾与稳定性测试工作。

1.简介:

TI针对TMS320DM365、DM368进行了DVR和IPNC的应用方案参考。DVR方案一般基于DM368 DVRRD SDK (includes TI DVSDK, TI LSP, DVR applications, DVR filesystem, boot and other utilities)开发。IPNC方案也是基于DVSDK。具体开发环境的搭建参考相应的开发包中的文档。

本文主要介绍IPNC

2.IPNC中软件架构

主要是基于CE(codec engine)的机构,CE说白了是一套软件,在这套软件上可以方便的集成TI针对DSP编写的 一些算法。
ps:Codec Engine是一系列用于表示和运行数字多媒体标准化DSP算法接口(XDAIS)及算法的API。XDAIS定义了一整套的多媒体算法编程接口,可单独在GPP或DSP上运行,也可在DSP上运行,而GPP通过Codec Engine对其实行控制。对于所有支持的运算器结构、运行方式及操作系统,Codec Engine都有相同的API。Codec Engine定义了4类编解码器算法接口标准,分别是视频、图像、语音、音频,简称VISA。
CMEM模块也是基于CE架构的软件框架中常用的一个内核模块,他在用户空间方便用户进行物理上连续内存的管理与共享使用。

3.应用层结构

在Linux、cmem、CE等的基础上,基于Linux的应用程序的框架如下图所示:
在系统启动后,会启动一些应用程序(进程),主要有:

AV_Server

Systemserver

RTPstreaming server

HTTPserver

这些进程的作用:

AV_Server process is responsible for:

• Capturingvideo and audio data from image sensor and audio device

• Encodingaudio and video data

• Managingand storing encoded data in the circular buffer and cache buffer

• Sendingaudio or video bit-stream response requested by other application

System server process responsible for:

• Storingand restoring system parameter

• Savingor uploading video files to ftp servers or local disk depending on the

alarm or schedule events

• Controllingthe system devices (RTC, USB)

HTTP server and RTP streaming servers areresponsible for:

• Sendingresponse of the video, audio, or system requested from internet

Processes use POSIX msgsnd and msgrcv tocommunicate with each other

• Passingparameters by POSIX share memory or CMEM device driver

Circular buffers, cache pools and messagequeues in shared memory are used for

inter-process communication.

4.程序的启动分析

在内核启动后,执行一些脚本。

启动脚本位于文件系统的/etc/init.d/rsS文件中,其中核心启动顺序代码如下:

DVEVMDIR=/opt/ipnc       #声明一个变量并赋值

# Load the dsplink and cmem kernel modules 加载dsplink和cmem等内核模块

cd $DVEVMDIR   #进入opt/ipnc目录

$DVEVMDIR/av_capture_load.sh    #”$”表示引用变量

{#av_capture_load.sh

#!/bin/sh

#"#!"字符告诉系统同一行上紧跟在他后面的那个参数用来执行文件的程序

./av_capture_unload.sh 2>/dev/null #首先将相关的模块卸载

#0表示标准输入,1表示标准output, 2表示标准错误error,该命令表示将脚本csl_unload.sh错误信息输入到(重定向到)只写文件中(/dev/null经典的黑洞文件,即只能写不能读),可以理解为不要将错误信息输入到标准输出设备。

./csl_load.sh                #加载csl(片级支持库)模块

./drv_load.sh   #加载drv(驱动模块)模块

insmod cmemk.ko phys_start=0x83000000 phys_end=0x88000000allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672

#加载cmemk.ko(连续内存模块)模块,用于DSP和ARM共享,它的起始位置是0x83000000,结束位置为0x88000000,大小为80M。

insmod edmak.ko  #加载EDMA模块

insmod irqk.ko    #加载快速中断模块

insmod dm365mmap.ko   #加载dm365内存映射模块

}

cd /dev

ln -s rtc0 rtc  #建立连接

cd $DVEVMDIR

mount -t jffs2 /dev/mtdblock4 /mnt/nand  #挂载日志文件系统

sleep 1

./system_server &  #后台运行system_server

$DVEVMDIR/loadkmodules.sh  #运行内核模块脚本

$DVEVMDIR/loadmodules_ipnc.sh  #运行内核模块脚本

ifconfig lo 127.0.0.1 #设定本机回环地址为 127.0.0.1

./boot_proc 1

# Start the demo application #开始运行应用程序demo

cd $DVEVMDIR

$DVEVMDIR/autorun.sh #执行autorun.sh脚本

{# autorun.sh

#echo "2" >/proc/cpu/alignment

sleep 1

./boa -c /etc &    #启动boa服务器

}

5.部分进程分析

整体上来说上述几个进程通过Linux及DSPLINK提供的进程间通信的手段进行通信与协作控制,主要是systemserver利用消息队列进行系统控制,控制av_server、boa等。网页配置参数通过boa接收网页消息,给systemserver发送消息进行系统控制。

6.总结

本文帮助新手快速了解架构,涉猎不深,系统中涉及到的其他内容,根据需要进行学习。如PISA、ONVIF(安防标准),boa(提供网页访问),GoDB(提供网页访问的UI),wis-streamer(提供网络视频流)等。
最后谈一下自己的感受:一个完整的系统,每一部分拿出来细细研究都有很多内容。由于我主要做的稳定性测试性工作,所以很多细节的技术都有心无力。systemserver进程基本与视频采集和codec无关,是纯纯的Linux编程,涉及多线程、socket、System V进程通信,以及USB、网口等各方面的编程,对于学习Linux编程很有帮助。
参考:Application_DesignGuide_IPNC_DM36x.pdf
AVServer_DesignGuide_IPNC_DM36x.pdf

原文地址:http://blog.csdn.net/guo8113/article/details/39937873

DM365 IPNC软件架构详解相关推荐

  1. S32K SDK使用详解之S32 SDK软件架构详解

    内容提要 引言 1. SDK的MCU平台相关设备驱动解析(SDK-->platform-->devices目录) 1.1 子目录common 1.2 子目录S32K1xx(为具体使用的MC ...

  2. DM365 IPNC软件架构具体解释

    于2013在上半场 - 年DM365.DM368的IPNC(网络摄像机)与稳定性测试工作产品结束. 1.简单介绍: TI针对TMS320DM365.DM368进行了DVR和IPNC的应用方案參考.DV ...

  3. 软件架构详解(附图)

    软件架构(software architecture) 软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计.软件架构是一个系统的草图.软件 ...

  4. 微信等IM软件架构详解(转)

    转载于:https://www.cnblogs.com/supperlhg/p/9454496.html

  5. 设计模式-软件架构设计七大原则及开闭原则详解

    前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,Remi酱特别开了这个博客来记录自己 ...

  6. 软件架构-zookeeper之curator详解

    为了更好的实现java操作zookeeper服务器,后来出现Curator框架,非常的强大,目前已经是apache的顶级项目,里面提供了更多丰富的操作.例如:session超时重连,主从选举,分布式计 ...

  7. 19. OP-TEE中TA与CA执行流程详解-------软件架构篇

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  8. C++ 智能指针详解

    智能指针内容很多,重点是基本用法. #include <boost/shared_ptr.hpp> class CBase: public boost::enable_shared_fro ...

  9. netty 之 telnet HelloWorld 详解

    2019独角兽企业重金招聘Python工程师标准>>> 依赖工具 Maven Git JDK IntelliJ IDEA 源码拉取 从官方仓库 https://github.com/ ...

最新文章

  1. drugbank下载XML文件解析
  2. 关于 ElesticSearch 安装
  3. sql server 2005 sa登录失败解决方法
  4. Excel分列功能的妙用
  5. concat php,php基于concat实现无限分类
  6. java异常处理机制_Java的异常处理机制
  7. Python爬虫项目---批量下载深圳证券信息
  8. eclipse报错找不到tools.jar
  9. 用于无人驾驶技术的车道线_自动驾驶汽车可用于查找车道的4种技术
  10. Charles 导出所有request, response, cookie, 导出为HTTP Archive .har
  11. Android制作自己的依赖库让别人引用【转】
  12. 怎么在html5中视频加字幕,视频转换王如何加字幕 在视频中添加文字的方法
  13. unity3d 建立3D中文立体字
  14. java file 只读_Java如何设置文件为只读?
  15. cheeta(cheetah mobile官方)
  16. 如何理解界面陷阱电荷呢(interface trapped charge)和费米钉扎效应?
  17. 阿昆的Java学习日记Day2
  18. iMazing2.16最新苹果手机备份同步工具
  19. 贝叶斯估计和极大似然估计到底有何区别
  20. 浮萍自动清理机器人——第一次下水201606

热门文章

  1. 计算机网络wireshark抓包实验
  2. 【0064】 PostgreSQL报错提示:Is the PostgreSQL Server Running Locally and Accepting?
  3. Python使用中常见问题总结(三)
  4. 最新Windows下Go语言开发环境搭建+GoLand配置
  5. android点击事件透传,点击事件透传机制
  6. 《武林外传》之(零) 管理演绎
  7. POJ1011-Sticks
  8. html js相册样式,JavaScript+CSS相册特效实例代码
  9. 27种深度学习的主流神经网络
  10. pdf如何转换成txt文档