您的位置: 主页 > 虎虎vr > 雷盾软件站:基于DLNA的音频广播系统的设计与实现

雷盾软件站:基于DLNA的音频广播系统的设计与实现

时间: 2019-08-09阅读:

摘要:随着信息产业的高速发展,在国内外音视频技术迅猛发展的基础上,各种家庭网络设备层出不穷,特别是音频设备在日常生活中的使用更是普遍,传统广播系统的局限性越來越无法满足人们的需要,设计能够实现局域网内的资源共享的智能广播系统已经成为未来发展的必然趋势。以DLNA数字家庭网络为基础,从分析UPnP协议的模块出发,利用Linux嵌入式开发平台设计一套完整的音频广播系统。

关键词: UPnP协议; 局域网;媒体源; 媒体控制点; 音频服务; ARM

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2019)11-0221-03

Abstract: With the rapid development of the information industry, various home network devices are emerging on the basis of the rapid development of audio and video technology at home and abroad. Especially the use of audio equipment in daily life is more common, and the limitations of traditional broadcasting systems are unable to meet people's needs. Designing an intelligent broadcast system which is capable of realizing resource sharing within a local area network has become an inevitable trend in the future. Based on the DLNA digital home network, a complete audio broadcasting system is designed with the UPnP protocol module and Linux embedded development platform .

Key words:UPNP agreement; local area network; media resourse; media control point; audio service; ARM

引言

随着信息产业的高速发展,在国内外音视频技术迅猛发展的基础上,各种家庭网络设备层出不穷,特别是音频设备在日常生活中的使用更是普遍,传统广播系统的局限性越来越无法满足人们的需要,因此设计能够实现局域网内的资源共享的智能广播系统已经成为未来发展的必然趋势。由于UPnP协议的提出,为基于DLNA(数字生活网络联盟)的音频广播系统的设计提供了便利。UPnP是一中网络协议,它以TCP/IP协议为基础,功能十分强大。以DLNA数字家庭网络为基础,利用Linux嵌入式开发平台来设计一套音视频广播系统。

1 系统需求分析

音频广播系统的设计主要包括媒体服务器(DMS)的设计、媒体控制点的设计、和媒体播放器的设计,在局域网中利用UPnP协议作为搭建整个系统的桥梁,将从设备、服务、控制点这3个主要部分出发,建立一套完整的系统。

1.1系统功能需求

通过一台PC主机分别控制多台DLNA设备播放音频文件,音频格式上一般都能支持市面上常用的音频格式,而且在局域网连接到Internet网络后,也能支持网络上音频播放。同时通过广播的方式告知局域网中音频设备的存在,以便控制点可以捕获到该消息,显示MFC到界面中。

1.2开发平台环境

PC部分主要使用VS2013开发平台,基于Platinum SDK来完成DNLA部分的音频服务端和控制点部分。ARM音频播放设备的实现主要利用开源的renderer0.0.1代码,自主的发送SSDP协议。

2 系统设计概要

DLNA数字生活网络联盟由微软提出,其目的在于实现各种设备在各种不同网络中的互联互通,促进数字媒体中网络资源最大程度的共享。在不需要其他的设定动作的情况下,DLNA基本就可以实现基于原有网络架构上的中介层上的设备的相互交流。UPnP协议在DLNA的网络协议中居于核心地位,它分配了家庭中本地的网络里的各个部分的工作,并且定义了设备发现控制点、控制点发现设备的过程,只要不违背这个标准,各种设备都可以接入。UPnP的应用环境对网络的依赖性较大,主要是以TCP/IP协议和因特网为基础的,接入以后能够自动获取IP地址,在网络中的每个设备都可以获取属于自己的各种状态和参数。当操作完成的时候,如果成功,可以获得对应的响应消息来确认完成操作。该广播系统主要是在局域网中利用UPnP协议作为搭建整个系统的桥梁,将从设备、服务、控制点这3个主要部分出发,建立一套完整的系统,其UPnP 组件图如图1所示。

系统通过一台PC主机分别控制多台DLNA设备播放音频,在局域网连接到Internet网络后,也就支持网络音频播放。其中DLNA架构的音频广播系统框架图如图2所示。

4 系统详细实现过程

4.1使用VS2013建立DLNA媒体播放工程

PC部分主要使用VS2013开发平台,基于Platinum SDK来完成DNLA部分的音频服务端和控制点部分。打开VS2013文件菜单,创建一个基于MFC的可视化应用程序。改程序主要是用来开发PC端用于显示控制点与设备的交互过程,当控制点成功获取到设备,并将音频文件传递给音频设备端,就会在在可视化窗口中显示所获取的资源的位置。

4.2媒体服务器(DMS)的实现

将播放列表中添加本地媒体资源,作为媒体服务器的资源来源,添加D盘目录下Musics文件夹中的音频文件,关键代码如下:

CString str;

str = "d:\\Musics\\1122.mp3";

m_playerlist.InsertString(0,str);

HANDLE m_hThread;

m_hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)InitUPnP,this,0,NULL);

CloseHandle(m_hThread);

Options.path = "d:\\Musics";

Options.port = 12563;//端口号

PLT_DeviceHostReference device(

new PLT_FileMediaServer(

Options.path,

"Platinum UPnP Media Server",

false,

"SAMEDEVICEGUID",

(NPT_UInt16)Options.port)

);

UPnP.AddDevice(device);

UPnP.AddCtrlPoint(ctrlPoint);

UPnP.Start();

PLT_FileMediaServer::PLT_FileMediaServer(const char* file_root, //Options.path

const char* friendly_name,

bool show_ip,

const char* uuid,

NPT_UInt16 port,

bool port_rebind):

PLT_FileMediaServerDelegate("/",

file_root,

friendly_name,

show_ip,

uuid,

port,

port_rebind)

{SetDelegate(this);}

m_playerlist.GetText(nCulSel,szContent); //提取目錄地址

(_tcsrchr(szContent,_T('\\')))[1] = 0;

CString strPath = szContent; //获取类函数指针

PLT_FileMediaServerDelegate tempfileMediaServer;

fileMediaServer = tempfileMediaServer.GetDelegate();//设置目录地址

const size_t strSize = (strPath.GetLength() +1)*2;

char* pstr = new char[strSize];

size_t sz =0;

wcstombs_s(&sz,pstr,strSize,strPath,_TRUNCATE);

//设置音频文件的root路径给httpserver

fileMediaServer->SetFilePath((NPT_String)pstr); //获得文件名称

通过MessageBox来打印生成的媒体服务器音频文件地址如图3所示:

4.3媒体控制点的实现

这部分主要完成播放、暂停、停止、上一首、下一首、快进以及快退等播放控制功能。媒体控制点界面如图4所示:

通过以下代码实现:

controller->SetMediaAVTransportURI(url); //发送URI地址

controller->MediaPlay();

NPT_Result

PLT_MediaController::SetAVTransportURI(

PLT_DeviceDataReferenc & device,

NPT_UInt32 instance_id,

const char* uri,

const char* metadata,

void* userdata)

{PLT_ActionReference action;

NPT_CHECK_SEVERE(m_CtrlPoint->CreateAction(

device,

"urn:schemas-UPnP-org:service:AVTransport:1",

"SetAVTransportURI",

action)); // 设置当前URI

if (NPT_FAILED(action->SetArgumentValue("CurrentURI", uri))) {

// 设置metadata

return NPT_ERROR_INVALID_PARAMETERS; }

if (NPT_FAILED(action->SetArgumentValue("CurrentURIMetaData", metadata))) {

return NPT_ERROR_INVALID_PARAMETERS; }

return InvokeActionWithInstance(action, instance_id, userdata); }

4.4媒体控制点的实现

使用ARM嵌入式开发平台,主芯片采用ASAP1826T(ARM9)来完成音频播放设备设计,主要利用开源的renderer0.0.1代码。通过renderer调用开源的mplayer源码来进行播放,其中mplayer采用slave模式播放,slave模式播放的好处是可以接受外部命令的控制,从而实现播放、暂停等命令。

int cRenderer::AVControlPointCallbackEventHandler(UPnP_EventType EventType,void *Event,void *Cookie)

UPnPAcceptSubscription(device_handle,l_udn,l_serviceId,

(const char**)g_dev_service_list[i].VariableName,

(const char**)g_dev_service_list[i].VariableStrVal,

g_dev_service_list[i].VariableCount,l_sid);

((cRenderer*)lnkcRenderer)->mplayer_cmd("pause",false);//暫停功能

((cRenderer*)lnkcRenderer)->mplayer_cmd("quit",false);//停止功能

sprintf(cmd,"seek %i2\n",((cRenderer*)lnkcRenderer)->positionToSeek);

((cRenderer*)lnkcRenderer)->mplayer_cmd(cmd,false);//快退快进功能

最后当action函数中在处理有关联的操作之后后,接着就调用函数UpnPAddToActionResponse来返回给控制点,通知控制点更新状态。

5 结束语

在互联网高度发展的今天,设计能够实现局域网内的资源共享的智能广播系统已经成为未来发展的必然趋势。为基于DLNA的音频广播系统的设计,解决了传统广播系统资源共享的局限性,为用户带来更好的使用体验。

参考文献:

[1] 耿杨.基于开源码MPlayer的交互播放器的开发[D].北京:北京邮电大学,2010.

[2] 白宪丽.基于RTP音频的实时传输实施与实现[D].成都:电子科技大学,2006.

[3] 孙鹏.多系统下DLNA数字家庭网络人机交互系统的设计与实现[D].南京:南京邮电大学,2013.

[4] 沈文斌.嵌入式硬件系统设计与开发实例详解[M].北京:电子工业出版社,2005:15-20.

[5] 郑瑞银,史晓红.基于数字生活网络联盟的媒体适配器设计研究[J].硅谷,2008(24):56-58.

[6] 丁森华,李学伟,张乃光,等.数字家庭标准综述与应用分析[J].电视技术,2012(14):28-30.

[7] 赵丁.基于ARM-Linux的触屏多媒体播放器设计[D].安徽:安徽理工大学,2012.

【通联编辑:唐一东】

上一篇:色妊阁:肝脏超声图像降噪处理的两种方法比较
下一篇:没有了

相关阅读