【问题标题】:upnp: Get Content from MediaServer Device without AVTransport Serviceupnp:从没有 AVTransport 服务的 MediaServer 设备获取内容
【发布时间】:2015-08-02 19:40:55
【问题描述】:

我想从支持 DLNA 的 Sony NEX-6 相机下载图像。发现 ConnectionManager 将返回:

<device
    xmlns="urn:schemas-upnp-org:device-1-0">
    <dlna:X_DLNADOC
        xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMS-1.50
    </dlna:X_DLNADOC>
    <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>
    <friendlyName>NEX-6</friendlyName>
    <manufacturer>Sony Corporation</manufacturer>
    <manufacturerURL>http://www.sony.com/</manufacturerURL>
    <modelDescription>SonyDigitalMediaServer</modelDescription>
    <modelName>SonyImagingDevice</modelName>
    <modelURL>http://www.sony.net/</modelURL>
    <UDN>uuid:00000000-0000-0010-8000-2002af0fa742</UDN>
    <serviceList>
        <service>
            <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>
            <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId>
            <SCPDURL>/CdsDesc.xml</SCPDURL>
            <controlURL>/upnp/control/ContentDirectory</controlURL>
            <eventSubURL>/upnp/event/ContentDirectory</eventSubURL>
        </service>
        <service>
            <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
            <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
            <SCPDURL>/CmsDesc.xml</SCPDURL>
            <controlURL>/upnp/control/ConnectionManager</controlURL>
            <eventSubURL>/upnp/event/ConnectionManager</eventSubURL>
        </service>
    </serviceList>
    <iconList>
        <icon>
            <mimetype>image/jpeg</mimetype>
            <width>48</width>
            <height>48</height>
            <depth>24</depth>
            <url>/DLNA_camera_48.jpg</url>
        </icon>
        <icon>
            <mimetype>image/jpeg</mimetype>
            <width>120</width>
            <height>120</height>
            <depth>24</depth>
            <url>/DLNA_camera_120.jpg</url>
        </icon>
        <icon>
            <mimetype>image/png</mimetype>
            <width>48</width>
            <height>48</height>
            <depth>24</depth>
            <url>/DLNA_camera_48.png</url>
        </icon>
        <icon>
            <mimetype>image/png</mimetype>
            <width>120</width>
            <height>120</height>
            <depth>24</depth>
            <url>/DLNA_camera_120.png</url>
        </icon>
    </iconList>
    <av:standardCDS
        xmlns:av="urn:schemas-sony-com:av">5.0
    </av:standardCDS>
    <av:photoRoot
        xmlns:av="urn:schemas-sony-com:av">PhotoRoot
    </av:photoRoot>
</device>

据我所知,这款相机不提供​​ AVTransport 服务。真的吗?那么如何从相机中获取图像呢?最大。 ContentDirectory 服务的分辨率太小 (JPEG_LRG)。

【问题讨论】:

  • 这里你肯定搞错了:AVTransport 是由渲染器(例如电视)提供的服务。带有 AVTransport 的相机没有多大意义。
  • 阅读此内容:upnp.org/specs/av/UPnP-av-MediaServer-v1-Device.pdf 它告诉您:“MediaServer:1 产品必须实现下表中指定的所有必需嵌入式设备和服务的最低版本号。” ContentDirectory:1.0 (required), ConnectionManager:1.0 (required) AVTransport:1.0 (optional) 所以它是可选的。问题是:如何从相机获取资源流?其他,我想我会使用 AVTransport:“控制点使用这个 [AVTransport] 实例来控制内容到网络的流(例如播放、FF、REW、Seek 等)。”
  • AVTransport 不会做你想做的事:它只允许你控制设备上的播放,而不是获取实际的媒体。 ContentDirectory 是应该做你所要求的服务(但可能不支持你暗示的大图像)。

标签: service media sony upnp dlna


【解决方案1】:

感谢https://play.google.com/store/apps/details?id=lv.n3o.shark 我可以捕获流量。 大多数请求都是“标准”ContentDirectory 请求,例如获取文件夹列表、文件、预览图像等。 但是,一旦我下载了完整的图像,我就会收到这样的请求:

GET http://10.0.0.1:60151/LRG__DSC9978.ARW?%2104%5f02%5f1107310400%5f000002%5f000073%5f000000%21http%2dget%3a%2a%3aimage%2fjpeg%3aDLNA%2eORG%5fPN%3dJPEG%5fLRG%3bDLNA%2eORG%5fCI%3d1%21%21%21%21%21 HTTP/1.1
Connection: close
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.1; HUAWEI G510-0100 Build/HuaweiG510-0100)
Host: 10.0.0.1:60151
Accept-Encoding: gzip

这将以 1616 x 1080 像素大小的 JPEG 格式返回图像数据......哇。解码 GET 请求返回:

!04_02_1107310400_000002_000073_000000!http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_CI=1!!!!!

现在我必须看看如何构建这个查询字符串。对我来说似乎不是标准化的。如果有人有线索,请告诉我。

【讨论】:

  • 好的,首先是ObjectID,文件名由ContentDirectory 服务提供,其余的似乎是一些静态设置。不知道为什么它们被! 分隔,而不是像“正常”GET 参数(例如LRG__DSC9978.ARW?ObjectID=04_02_1107310400_000002_000073_000000&amp;...)那样使用。但我想我有所有信息来获取图像。 :) 感谢所有试图提供帮助的人!如果您确实有一些进一步的信息,例如这是否在某处标准化,请告诉我!
  • 嗨安德烈!我知道这已经过去了,但你有没有设法弄清楚这一切是如何运作的?我正在尝试制作一个与此类似的应用程序!
【解决方案2】:

实际上,索尼数码相机不是 DLNA/UPnP,而是由基于 HTTP 和 JSON 的Wirelessly access Sony cameras with the Camera Remote API beta 控制的。

https://developer.sony.com/develop/cameras/

希望这会有所帮助。

【讨论】:

  • 我听说了,谢谢。但遗憾的是,我无法使用Camera Remote API,因为我在仅支持 JavaScript 的 Firefox OS 上运行该应用程序。任何关于如何在不使用 Camera Remote API 的情况下获取源 URL 的提示将不胜感激。到目前为止,访问 ContentDirectory 服务效果很好,不仅缺少下载全分辨率图像的部分。而且我不知道该怎么做(也无法拦截摄像头流量)。
  • 链接页面暗示服务是 JSON 服务。从 javascript 使用它有什么问题?
猜你喜欢
  • 2012-11-26
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多