基于Linux电视棒实现DLNA和airplay功能

2019-07-13 00:06发布

http://blog.csdn.net/moruite/article/details/8496218
出发点:Android电视棒实现DLNA功能采用JAVA版本的cyberlink的话,缺点明显,SSDP协议设备发现有延时(有时还发现不了设备)体验差,基于Linux电视棒可以控制硬件成本在100元以下,而且c语言实现的cyberlink DLNA协议栈不存在设备发现不了的情况,本文记录记录linux下实现dlna碰到的一揽子问题 1. DLNA的DMR方案 方案1: MediaGateForCC (http://www.cybergarage.org/twiki/bin/view/Main/MediaGateForCC) 交叉编译,基于gstreamer实现播放器 Cyberlink协议栈需要依赖xml库, 可以选择xerces和libxml2, xerces是apatch提供的一个比较庞大的xml解析库,嵌入式设备不考虑。  1) 编译libxml2 ./configure --prefix=/home/work/mylib --host=mips-linux-gnu --build=i686 --target=mips-linux-gnu CC=mips-linux-gnu-gcc -EL CFLAGS=-I/home/work/mylib/include LDFLAGS=-L/home/work/mylib/lib
2)编译MediaGateForCC  ./configure --prefix=/home/work/mylib --host=mips-linux-gnu --build=i686 --target=mips-linux-gnu CC=mips-linux-gnu-gcc -EL --enable-libxml2 CFLAGS=-I/home/work/mylib/include CPPFLAGS=-I/home/work/mylib/include LDFLAGS=-L/home/work/mylib/lib 
错误1:LibXml2Parser.cpp中Node *newChildNode = convertToCLinkFormat( doc, child, depth  1)改成Node *newChildNode = convertToCLinkFormat( doc, child, depth ); 错误2:ControlPoint.cpp中Device **dev = new (Device(*[devCnt])); 改成 Device **dev = new Device* [devCnt]; 编译成功 3) CyberLink中没有实现Media Renderer的AVTransport和RenderingControl服务,以下是补充的AVTransport..h和RenderingControl.h [cpp] view plaincopy
  1. class AVT : public ActionListener, public QueryListener  
  2. {  
  3.   
  4.     CyberUtil::Mutex mutex;  
  5.     int maxConnectionID;  
  6.   
  7.       
  8.     ////////////////////////////////////////////////  
  9.     // Constants  
  10.     ////////////////////////////////////////////////  
  11.   
  12. public:  
  13.   
  14.     static const char *DESCRIPTION;  
  15.   
  16.     static const char *SERVICE_TYPE;  
  17.   
  18.     static const char * TRANSPORTSTATE ;  
  19.     static  const char *  TRANSPORTSTATUS ;  
  20.     static  const char *  PLAYBACKSTORAGEMEDIUM;  
  21.     static  const char *  RECORDSTORAGEMEDIUM;  
  22.     static  const char *  POSSIBLEPLAYBACKSTORAGEMEDIA;  
  23.     static  const char *  POSSIBLERECORDSTORAGEMEDIA;  
  24.     static  const char *  CURRENTPLAYMODE ;  
  25.     static  const char *  TRANSPORTPLAYSPEED;  
  26.     static  const char *  RECORDMEDIUMWRITESTATUS ;  
  27.     static  const char *  CURRENTRECORDQUALITYMODE ;  
  28.     static  const char *  POSSIBLERECORDQUALITYMODES;  
  29.     static  const char *  NUMBEROFTRACKS;  
  30.     static  const char *  CURRENTTRACK;  
  31.     static  const char *  CURRENTTRACKDURATION;  
  32.     static  const char *  CURRENTMEDIADURATION;  
  33.     static  const char *  CURRENTTRACKMETADATA;  
  34.     static  const char *  CURRENTTRACKURI;  
  35.     static  const char *  AVTRANSPORTURI;  
  36.     static  const char *  AVTRANSPORTURIMETADATA ;  
  37.     static  const char *  NEXTAVTRANSPORTURI;  
  38.     static  const char *  NEXTAVTRANSPORTURIMETADATA;  
  39.     static  const char *  RELATIVETIMEPOSITION;  
  40.     static  const char *  ABSOLUTETIMEPOSITION;  
  41.     static  const char *  RELATIVECOUNTERPOSITION ;  
  42.     static  const char *  ABSOLUTECOUNTERPOSITION ;  
  43.     static  const char *  CURRENTTRANSPORTACTIONS;  
  44.     static  const char *  LASTCHANGE;  
  45.     static  const char *  SETAVTRANSPORTURI;  
  46.     static  const char *  INSTANCEID;  
  47.     static  const char *  CURRENTURI;  
  48.     static  const char *  CURRENTURIMETADATA;  
  49.     static  const char *  SETNEXTAVTRANSPORTURI;  
  50.     static  const char *  NEXTURI;  
  51.     static  const char *  NEXTURIMETADATA ;  
  52.     static  const char *  GETMEDIAINFO;  
  53.     static  const char *  NRTRACKS;  
  54.     static  const char *  MEDIADURATION;  
  55.     static  const char *  PLAYMEDIUM ;  
  56.     static  const char *  RECORDMEDIUM ;  
  57.     static  const char *  WRITESTATUS ;  
  58.     static  const char *  GETTRANSPORTINFO ;  
  59.     static  const char *  CURRENTTRANSPORTSTATE;  
  60.     static  const char *  CURRENTTRANSPORTSTATUS ;  
  61.     static  const char *  CURRENTSPEED ;  
  62.     static  const char *  GETPOSITIONINFO;  
  63.     static  const char *  TRACK;  
  64.