LINUX.ORG.RU

upnp avtransport - кто-нибудь ковырял?

 


0

1

Добрый день.

Гуглил, каким образом заставить Smart TV воспроизводить какой-либо контент по http, с удивлением узнал, что DLNA для этого вообще не нужно. Нужно просто обменяться с телеком парой http запросов с XML контентом, в котором указать произвольную ссылку на медиа контент и дать команду играть. Телек перестанет заниматься тем, чем занимается и начнёт воспроизводить указанный http.

Есть желание сделать простую кросс-платформенную тулзу, которая бы получала аргумент - URL - и заставляла телек его воспроизводить. Затем добавить адд-он к мозилле, который бы отправлял контент на телек. Возможно, допилить vlc, чтобы он запускал поток и отправлял в телек ссылку на себя.

Никакого DLNA, никаких тормозов, только маленький кусочек upnp. С удивлением обнаружил, что никто этим не занимается.

Может, тут кто ковырял upnp?

★★★★★

Я очень хотел поковыряться и создавал тут недавно тему с вопросами, где найти доки. До самого ковыряния руки еще не дошли. Поделись, плиз, чего нарыл.
И, кстати, вопрос, который задавал там:
Можно ли заставить показать каталог вместо конкретного файла?

ls-h ★★★★★
()
5 августа 2015 г.

Так DLNA же подмножество UPnP.

А по теме, я сейчас такой фигней страдаю, сейчас заставил музыку и видео из VK воспроизводиться на AVTransport.

Кстати, мне очень помогла эта штука - Developer Tools for UPnP Technologies.

chkalov
()
Ответ на: комментарий от chkalov

Сорцами поделишься? Звучит отлично. Я хочу сделать расширение к мозилле, типа «отправить поток в телек»

Shadow ★★★★★
() автор топика
Ответ на: комментарий от Shadow

Да, но не сразу)

Я пишу на шарпе, и пока использую майкрософтовский сервис для получения списка устройств. Есть кросплатформенный mono upnp, но обнаружение устройств в нем очень медленное, пока от него отказался.

chkalov
()
Ответ на: комментарий от Shadow

Попробую через несколько дней перепилить на mono upnp, напишу тогда.

chkalov
()
Ответ на: комментарий от Shadow

Примерно так, тогда

public class WinDlnaService : IDlnaService
{
	public Task<IEnumerable<MediaDevice>> GetDevicesAsync()
	{
		var finder = new UPnPDeviceFinder() as IUPnPDeviceFinder;
		return Task.Factory.StartNew(() =>
		{
			var res = finder.FindByType("urn:schemas-upnp-org:device:MediaRenderer:1", 0);

			var devices = res.OfType<IUPnPDevice>().ToDictionary(dv => dv.UniqueDeviceName, dv => dv);
			var upnPDevices = devices.Values.Select(MediaDevice.FroMediaDevice);
			return upnPDevices;
		});
	}

	public IEnumerable<MediaDevice> GetDevices()
	{
		var d = new UPnPDeviceFinder() as IUPnPDeviceFinder;
		var res = d.FindByType("urn:schemas-upnp-org:device:MediaRenderer:1", 0);

		var devices = res.OfType<IUPnPDevice>().ToDictionary(dv => dv.UniqueDeviceName, dv => dv);
		var upnPDevices = devices.Values.Select(MediaDevice.FroMediaDevice);
		return upnPDevices;
	}
}

Это мы получили список устройств, которые могут воспроизвести файл.

Дальше нужно получить нужный сервис на устройстве, нужен AVTransport

var instance = new WinDlnaPlayer
{
	avTransport = device.Services.OfType<IUPnPService>().FirstOrDefault(s => s.Id.EndsWith("AVTransport"))
};

Тогда можно уже воспроизводить медиа файл.

object vOutActionArgs = new object[2];
service.InvokeAction("SetAVTransportURI", new object[] {0, uri, uri}, ref vOutActionArgs);

if (await GetCurrentState() == "STOPPED")
{
	vOutActionArgs = new object[2];
	service.InvokeAction("Play", new object[] {0, "1"}, ref vOutActionArgs);
}

Соответственно, нужно вызвать SetAVTransportURI, чтобы задать url воспроизводимого файла, потом Play, если надо.

Я всё это определял методом научного тыка, поэтому мб что не точно.

И опять бы посоветовал заюзать «Developer Tools for UPnP Technologies» - убил кучу времени, пытаяь понять что и как, а тут есть тулза Desktop Spy, кажется - показывает все доступные UPnP узлы, какие на них есть сервисы, какие у этих сервисов экшны, эти экшны можно вызвать, и т.д.

Я вначале вообще запускал воспроизведение музыки на xbox этой тулзой - в developer tools посмотрел url песни в контакте, в desktop spy нашел xbox, вызвал соответствующие экшны, передал туда url песни - вуаля.

chkalov
()
6 января 2017 г.
Ответ на: комментарий от chkalov

Знаю что тема, старая, но новую решил не создавать и поднять эту.

Тоже занялся отправкой линков на ТВ производства samsung по upnp и вполне успешно, только вот какая заковыка - ТВ на ура жрёт линки с сервера в локальной сети, а вот из интернета - шиш, не берёт линки как по хосту, так и по ip.

ТВ на выхлопе как самописного скрипта, так и device spy даёт ошибку 716 'resource not found'. Я так понимаю, это принудительное ограничение введённое жадными корейцами и по логике линки вполне должны отправляться на воспроизведение ?

Blacksmith
()
Ответ на: комментарий от Shadow

Выше написано

Я вначале вообще запускал воспроизведение музыки на xbox этой тулзой - в developer tools посмотрел url песни в контакте, в desktop spy нашел xbox, вызвал соответствующие экшны, передал туда url песни - вуаля.

Значит, это ограничение не жёсткое и ставится принудительно, в зависимости от жадности производителя.

Blacksmith
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.