Реализация DLNA/UPnP (Игра Win7 К) на мобильном устройстве

Движение полностью вниз к основам для Карты и Уменьшает.

<час>

Карта является функцией, которая "преобразовывает" объекты в некоторый список к другому виду объекта и откладывает их в том же виде списка.

предполагают, что у меня есть список чисел: [1,2,3] и я хочу удвоить каждое число, в этом случае, функция для "удвоения каждого числа" является функцией x = x * 2. И без отображений, я мог записать простой цикл, сказать

A = [1, 2, 3]
foreach (item in A) A[item] = A[item] * 2

, и я буду иметь = [2, 4, 6], но вместо того, чтобы писать циклы, если у меня есть функция карты, я мог бы записать

A = [1, 2, 3].Map(x => x * 2)

, x => x * 2 является функцией, которая будет выполняться против элементов в [1,2,3]. То, что происходит, - то, что программа берет каждый объект, выполнитесь (x => x * 2) против него путем создания x, равняется каждому объекту, и произведите список результатов.

1 : 1 => 1 * 2 : 2  
2 : 2 => 2 * 2 : 4  
3 : 3 => 3 * 2 : 6  

поэтому после выполнения карты функционируют с (x => x * 2), Вы имели бы [2, 4, 6].

<час>

Уменьшают , функция, которая "собирает" объекты в списках, и выполните некоторое вычисление на весь из них, таким образом уменьшив их до единственного значения.

Нахождение суммы или нахождение средних чисел являются всеми экземплярами уменьшать функции. Такой, как будто у Вас есть список чисел, скажите [7, 8, 9], и Вы хотите их подведенный итог, Вы записали бы цикл как это

A = [7, 8, 9]
sum = 0
foreach (item in A) sum = sum + A[item]

, Но, если у Вас есть доступ к уменьшать функции, Вы могли бы записать его как это

A = [7, 8, 9]
sum = A.reduce( 0, (x, y) => x + y )

Теперь, это немного сбивает с толку, почему существует 2 аргумента (0, и функция с X и Y) передал. Для уменьшать функции, чтобы быть полезным, это должно быть в состоянии взять 2 объекта, вычислить что-то и "уменьшить" это 2 объекта всего до одного единственного значения, таким образом программа могла уменьшить каждую пару, пока у нас нет единственного значения.

выполнение было бы следовать:

result = 0
7 : result = result + 7 = 0 + 7 = 7
8 : result = result + 8 = 7 + 8 = 15
9 : result = result + 9 = 15 + 9 = 24

, Но Вы не хотите запускаться с, обнуляет все время, таким образом, первый аргумент там, чтобы позволить Вам определить, что семя оценивает конкретно значение в первом result = строка.

говорят, что Вы хотите суммировать 2 списка, это могло бы быть похожим на это:

A = [7, 8, 9]
B = [1, 2, 3]
sum = 0
sum = A.reduce( sum, (x, y) => x + y )
sum = B.reduce( sum, (x, y) => x + y )

или версия Вы были бы более вероятно для нахождения в реальном мире:

A = [7, 8, 9]
B = [1, 2, 3]

sum_func = (x, y) => x + y
sum = A.reduce( B.reduce( 0, sum_func ), sum_func )
<час>

хорошая вещь в программном обеспечении DB, потому что, с поддержкой Map\Reduce можно работать с базой данных, не будучи должен знать, как данные хранятся в DB для использования его, это - то, для чего механизм DB.

просто необходимо быть в состоянии "сказать" механизм, что Вы хотите путем предоставления их или Карту или e Уменьшать функцию, и затем механизм DB мог найти свой путь вокруг данных, применить функцию и придумать результаты, Вы хотите все без Вас знающий, как это циклично выполняется по всем записям.

существуют индексы и ключи и соединения и представления и много материалов, которые могла содержать единая база данных, таким образом, путем защиты Вас против того, как данные на самом деле хранятся, Ваш код сделан легче записать и поддержать.

То же идет для параллельного программирования, если Вы только определяете то, что Вы хотите сделать с данными вместо того, чтобы на самом деле реализовать код цикличного выполнения, тогда базовая инфраструктура могла "параллелизировать" и выполнить Вашу функцию в одновременном параллельном цикле для Вас.

8
задан Chris Thompson 8 November 2009 в 23:12
поделиться

1 ответ

PlayTo полностью основан на UPnP. DLNA - это просто уровень стандартизации поверх UPnP. Таким образом, любое устройство UPnP может взаимодействовать с устройством DLNA и с машиной Win7. DLNA определяет 4 типа устройств: DMP, DMR, DMC и DMS. DMP (также известный как Digital Media Player) - это устройство, которое способно находить и просматривать удаленные серверы (DMS = Digital Media Server) и потреблять контент (или извлекать контент). PS3 - прекрасный пример DMP. DMP нельзя обнаружить в сети, он просто обнаруживает и потребляет контент. Поскольку его нельзя обнаружить, вы не можете управлять им с помощью PlayTo. DMR (также известный как Digital Media Renders) - это устройство, которое может принимать команды, полученные из сети. Он доступен для обнаружения, предоставляет документ описания UPnP и службы UPnP, такие как AVTransport и ConnectionManager или RenderingControl. Устройство PlayTo способно найти это устройство в сети и передать на него контент. Он может управлять воспроизведением через службу AVTransport и службу RenderingControl. Многие устройства сегодня на 100% являются DMP (не могут управляться через PlayTo) или DMP-DMR. Это означает, что они оба предоставляют службы AVTransport и RenderingControl, но также имеют графический интерфейс, который пользователь может использовать для извлечения мультимедиа с сервера. DMS (также известный как Digital Media Server) - это медиа-сервер. Вы можете хранить там мультимедийный контент, а затем использовать его с других сетевых устройств. Обычно это устройства NAS, но они также могут быть мобильными телефонами, машинами Win7 / Vista и т. Д. DMS обнаруживается в сети и предоставляет службы UPnP как службу ContentDirectory. Это предоставляет такие методы, как Обзор и Поиск, которые вы можете использовать для поиска контента. Устройство DMC (также известное как Digital Media Controller) - это устройство, не имеющее возможности воспроизведения. У него есть только возможности управления, и ему требуется удаленный DMS (для отображения контента) и удаленный DMR (для воспроизведения контента) для завершения работы с мультимедиа. PlayTo является примером. Аналогичные приложения есть на телефонах Nokia N95 / Nokia N78 или на iPhone. Twonky также имеет сетевой DMC.

Все эти устройства имеют одну общую черту: они понимают UPnP и говорят на нем. Они могут быть реализованы на C +, C #, Java, могут работать на платформе Windows, Linux или Apple, но все они основаны на UPnP. Итак, все, что вам нужно сделать, это познакомиться со стандартом UPnP. Я бы порекомендовал загрузить документы с upnp.org и Intel Device Spy (и других связанных инструментов Intel UPnP) и начать играть с ними. Если вы хотите написать DMC (или PlayTo) - что сделать проще всего - все, что вам нужно понять, - это просто некоторые базовые концепции UPnP (SOAP, XML, обнаружение сети и т. Д.). Если вы хотите написать свое приложение на платформе Win7, вы можете использовать Win UPnP API для обнаружения устройств и отправки им команд. Или вы можете написать свой собственный API для этого (это не так уж сложно). Я не знаю по телефону, какой API вы можете использовать. Однако вы всегда можете перейти к основному: отправка сообщений SOAP по сети с использованием базовых сетевых API. Для DMP / DMR вам потребуются возможности воспроизведения, и это может зависеть от платформы и имеющихся у вас кодеков.

Дайте мне знать, если это немного поможет вам начать работу. Спасибо CCazang

32
ответ дан 5 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: