LINUX.ORG.RU

Медиаплеер, временный файл, поток, перенаправление, php, каша


0

1

Приветствую! Надеюсь на дельный совет. Имеется медиаплеер на mips GNU/Linux 2.6.22.19-19-4 . Желается смотреть потоковое видео, будь то iptv(предварительно преобразованное udpxy в http), mms,rtsp,http. Имеющееся решение (также неофициальное) работает неудовлетворительно(различное время запуска,срывы, неподдерживаемые форматы).

Как вариант рассматривается использование msdl (Media Stream DownLoader) который без особых проблем позволяет скачать в файл или вывести в stdout любой подобный поток. И затем этот файл штатно можно воспроизвести медиаплеером (при этом проиграть можно почти сразу после начала захвата потока что есть +).

Но подобная схема также нехороша тем что нужно писать на винт такой файл потока.

Следует сказать что движок воспроизводящий естественно скрыт, но работает видимо с использованием DLNA фишек, т.е. запуск файла на воспроизведение с командной строки можно сделать навороченно так:

wget -q --post-data="<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>file:///path/to/your/file.avi</CurrentURI><CurrentURIMetaData /></u:SetAVTransportURI></s:Body></s:Envelope>" localhost:port/MediaRenderer_AVTransport/control --header='SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"'
Это только команда установки file:///path/to/your/file.avi как источника данных (так же можно указать и http:// ..) Затем следует команда, подобного же вида, начать воспроизведение (не показываю дабы не засорять).

Так вот главный вопрос: как обойтись без записи на винт имея при этом воспроизводящийся поток.

В голову приходят варианты:

1) воспользоваться выводом msdl в stdout а далее както заворачивать в php.

2) пользоваться подавлениями типа >/dev/null

3) писать во временный файл в памяти (довольно ограниченной, но размером достаточным для нормальной буферизации вполне можно позволить)

4) соорудить локальный прокси для потока типа http://localhost/file.avi в который будет шуровать поток (но на винт не сохраняться) и этот линк скармливать медиаплееру

5) ещё варианты..

Имеются сложности в понимании самого термина поток - как так можно воспроизводить нечто неопределенной длины и никуда не писать. Или представляется нечто стекоподобное конечной длины (для варианта с памятью) но изменяемым потокосодержимым.

Реализовывать можно на php shell или уж чем получится. Найдутся ли соображения как упорядочить имеющуюся кашу? :) Спасибо.



Последнее исправление: DJArty (всего исправлений: 2)

4) соорудить локальный прокси для потока типа http://localhost/file.avi в который будет шуровать поток (но на винт не сохраняться) и этот линк скармливать медиаплееру

Такой вариант проще всего на мой взгляд. Завернуть эту качалку в cgi скрипт и пусть она фигачит на stdout, как выхлоп сервера. Если cgi нельзя, то подсоединяться к stdout качалки с помощью php, читать поток и выдавать как в предыдущем варианте.

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

подсоединяться к stdout качалки с помощью php

это как? ) к примеру msdl http://stream-1.k26.ru:9009 -o - выдает в stdout и соответственно мусорит в терминал

msdl http://stream-1.k26.ru:9009 -o - >/dev/nul пишет что выдает в stdout но при этом не мусорит в терминал..

а что примерно дальше? )

Как stdout направить вот сюда чтоли localhost:port/MediaRenderer_AVTransport/control ? Или не туда... туда что ли только управляющие мессы идут..

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

И можно ли сделать типа «файла-пустышки» в который как бы передавать поток и который же указать в качестве файла-источника для плеера.

Интересно можно ли тот же stduot указать в качестве источника? :)

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

Мерси за варианты. На ББ получается норм., на плеере не очень. Пока получилось примерно так

<?php
   $cmd= "msdl http://stream-1.k26.ru:9003 2>/dev/null -o -";
   header('Content-Type:.....');
   ...
   passthru($cmd);
?>
и затем это натравливается медиаплееру. Думает долго но с результатом.

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