14.11.2018, 18:09 UTC+1

Вы не зарегистрированы.

  • Войти
  • Зарегистрироваться

Дорогой посетитель мы рады вас приветствовать на: Allrussian Board Русскоязычный форум в Германии. Если это Ваше первое посещение этого сайта, то прочитайте, пожалуйста, помощь . Там Вы узнаете о возможностях управления сайтом. Чтобы использовать все возможности сайта Вы должны зарегистрироваться. Для этого используйте Регистрационный формуляр. Вы можете прочитать подробности регистрационного процесса. Если Вы уже регистрировались, здесь Вы можете войти.

Epmak

Школьник

Дата регистрации: 26.07.2004

Сообщения: 71

1

14.09.2007, 11:19

Windows клиент для vdr

Цитата

Со слов пользователя Walery
Насчет графа не знаю, по крайней мере напрямую - какая-то обработка потока наверно нужна. Надо посмотреть описание протокола для streamdev - в плагине есть оно.. В общем нас интересует streamdev-client под винды :) А winstb мне нравится потому что он наиболее походит на интерфейс STB :) Все остальные проги под винды - больше заточены на просмотр на компе - с клавой-мышой и т.д.
Я вобщем тоже не собираюсь дома пользовать этот вариант дома - ну разве временно :) а вот на работе - очень бы пригодилось :)

Может я не ясно выражаюсь.
Попытаюсь на конктретном примере.
Предположим на Linux-машине со SkyStar1 установлен vdr.
Можно-ли параллельно выводу на телевизор передавать видео/аудио поток в сеть и проигрывать этот поток параллельно на Windows машине путем построения графа который начинается фильтром, который принимает поток по сети и который для видео заканчивается VideoMixingRenderer9?
Если я правильно понимаю, то для этой цели (трансляции видео/аудио в сеть) можно использовать streamts -ps.
В теории vlc под windows это съедает. Вполне возможно это можно делать и каким-нибудь из DS Filter'ов. Может у Moolight/Elecard есть что-то подобное.
Но я с этим не баловался.

VirtualSTBViewer позволяет показывать клон OSD от vdr рисуя его
через VideoMixingRenderer9.
Таким образом, если в VideoMixingRenderer9 будет показываться video которое идет на vdr, то получится копия экрана с Linux'а.

VirtualSTBViewer пересылает нажатия на клавиатуре на Windows-машине и WinLIRC-команды в соотвествующие команды vdr используя
его svdrp-протокол.


Цитата

Со слов пользователя Walery
to Epmak:
Там же все есть - и епг нормальное, и вообще..

Посмотри на скриншот 3-летней давности.
http://vstb.sourceforge.net/VSTBV_VDR_WhatsNow.jpg




_______________

Это сообщение уже редактировалось 5 раз/раза, последний раз пользователем »Epmak« (14.09.2007, 11:37)

  • К началу страницы

Grischenkow

Профи

Дата регистрации: 13.02.2004

Сообщения: 1 256

2

14.09.2007, 12:39

Под Windows есть mplayer




_______________
  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

3

14.09.2007, 12:42

Цитата

Со слов пользователя Grischenkow
Под Windows есть mplayer


И? На нем есть ЕПГ, список каналов, вобщем ОСД? :)




_______________
  • К началу страницы

Grischenkow

Профи

Дата регистрации: 13.02.2004

Сообщения: 1 256

4

14.09.2007, 12:44

:( нету.....




_______________
  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

5

14.09.2007, 12:53

RE: Windows клиент для vdr

Цитата

Со слов пользователя Epmak
[Можно-ли параллельно выводу на телевизор передавать видео/аудио поток в сеть и проигрывать этот поток параллельно на Windows машине путем построения графа который начинается фильтром, который принимает поток по сети и который для видео заканчивается VideoMixingRenderer9?


Вобщем, да. Фильтр можно использовать DS Source, или могу специальный написать. Управление идет по tcp, EPG тоже передается - правда не смотрел через как - потоком или просто файлик epg.dat копируется переодически на локальную машинку, список каналов - копия с сервака.
Причем смотреть на телеке можно одно, а на клиенте - другое (если одна карта - с одного транспондера, если больше - то с любого) Декодирование и прочее DeCSA происходит на серваке.
Я таким макаром смотрю на буке иногда - когда линукс запускаю :)
Ты глянь плагин streamdev..




_______________
  • К началу страницы

Epmak

Школьник

Дата регистрации: 26.07.2004

Сообщения: 71

6

14.09.2007, 14:31

RE: Windows клиент для vdr

Цитата

Со слов пользователя Walery
Вобщем, да. Фильтр можно использовать DS Source, или могу специальный написать.
Управление идет по tcp, EPG тоже передается - правда не смотрел через как - потоком или просто файлик epg.dat копируется переодически на локальную машинку, список каналов - копия с сервака.
Причем смотреть на телеке можно одно, а на клиенте - другое (если одна карта - с одного транспондера, если больше - то с любого) Декодирование и прочее DeCSA происходит на серваке.
Я таким макаром смотрю на буке иногда - когда линукс запускаю :)
Ты глянь плагин streamdev..



Грррр. Ты не понимашь что я имею в виду.

Может код патча vdr поможет.

Цитата


diff -C 7 G:\Inetpub\ftproot\old/dvbosd.c G:\Inetpub\ftproot\new/dvbosd.c
*** G:\Inetpub\ftproot\old/dvbosd.c Sat May 1 18:10:44 2004
--- G:\Inetpub\ftproot\new/dvbosd.c Sat Jul 24 14:08:24 2004
***************
*** 54,79 ****
--- 54,179 ----
}
if (TotalMemory > MAXOSDMEMORY)
return oeOutOfMemory;
}
return Result;
}

+ #define IOCTL_BUFFER_LENGTH 1000000
+
+ struct ioctl_buffer_t {
+ unsigned int cmd_length;
+ unsigned int additional_data_length;
+ unsigned int cmd_id;
+ unsigned char data[IOCTL_BUFFER_LENGTH];
+ };
+
+ #define IOCTL_BUFFER_HEADER_SIZE (sizeof(struct ioctl_buffer_t)-IOCTL_BUFFER_LENGTH)
+
+ inline unsigned int osd_data_size(osd_cmd_t *osd_cmd) {
+ int data_size;
+
+ switch (osd_cmd->cmd) {
+ case OSD_SetBlock:
+ data_size = (osd_cmd->y1 - osd_cmd->y0 + 1) * osd_cmd->color;
+ break;
+
+ case OSD_SetPalette:
+ data_size = (osd_cmd->x0-osd_cmd->color+1)*4;
+ break;
+
+ default:
+ data_size = 0;
+ };
+
+ return data_size;
+ };
+
+ #include <sys/socket.h>
+ #include <arpa/inet.h>
+ char *servIP = "192.168.0.1";
+ unsigned short ServPort = 8767;
+ int sock=-1;
+ #define dprintk if(1==1)printf
+
+ void send_data(unsigned char *data, unsigned int data_length, int respose_length) {
+ struct sockaddr_in ServAddr;
+ int sent_bytes;
+ int received_bytes;
+ unsigned int total_sent_bytes;
+
+ dprintk(" sending %d bytes\n",data_length);
+ if (sock<0) {
+ if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
+ dprintk("socket() failed\n");
+ return;
+
+ } else {
+ memset(&ServAddr, 0, sizeof(ServAddr));
+ ServAddr.sin_family = AF_INET;
+ ServAddr.sin_addr.s_addr = inet_addr(servIP);
+ ServAddr.sin_port = htons(ServPort);
+ if (connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr)) < 0) {
+ dprintk("connect() failed\n");
+ sock = -1;
+ return;
+
+ }
+ }
+ dprintk("connected to %s\n",servIP);
+ }
+ total_sent_bytes=0;
+ while(total_sent_bytes<data_length) {
+ sent_bytes=send(sock, data+total_sent_bytes, data_length-total_sent_bytes, 0);
+ dprintk("sent_bytes=%d\n",sent_bytes);
+ if (sent_bytes<0) {
+ dprintk("errno=%d\n",errno);
+ sock = -1;
+ return;
+ }
+ total_sent_bytes += sent_bytes;
+ };
+
+ received_bytes=recv(sock, data, respose_length, 0);
+
+ if (received_bytes!=respose_length) {
+ dprintk("recv() failed\n");
+ sock = -1;
+ return;
+ };
+ };
+
+ struct ioctl_buffer_t OSD_ioctl;
+
+ void send_OSD_ioctl(const void *arg)
+ {
+ OSD_ioctl.cmd_length = sizeof(osd_cmd_t);
+ OSD_ioctl.additional_data_length = osd_data_size((osd_cmd_t *)arg);
+ OSD_ioctl.cmd_id = OSD_SEND_CMD;
+ memcpy(OSD_ioctl.data,arg,OSD_ioctl.cmd_length);
+ memcpy(OSD_ioctl.data+OSD_ioctl.cmd_length,
+ ((osd_cmd_t *)arg)->data,OSD_ioctl.additional_data_length);
+ send_data((unsigned char*)&OSD_ioctl,
+ IOCTL_BUFFER_HEADER_SIZE+OSD_ioctl.cmd_length+OSD_ioctl.additional_data_length,
+ IOCTL_BUFFER_HEADER_SIZE+OSD_ioctl.cmd_length);
+ };
+
void cDvbOsd::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, const void *data)
{
if (osdDev >= 0) {
osd_cmd_t dc;
dc.cmd = cmd;
dc.color = color;
dc.x0 = x0;
dc.y0 = y0;
dc.x1 = x1;
dc.y1 = y1;
dc.data = (void *)data;
ioctl(osdDev, OSD_SEND_CMD, &dc);
+ send_OSD_ioctl(&dc);
}
}

void cDvbOsd::Flush(void)
{
cBitmap *Bitmap;
for (int i = 0; (Bitmap = GetBitmap(i)) != NULL; i++) {



В стандартный класс vdr'а cDvbOsd я добавил параллельную отсылку
данных этой команды по TCP IP. На Windows стороне данные OSD ioctl'а
разбираются и соответсвующие картинки рисуются используя alphablending на VMR9. Осталось только на VMR9 пустить видео с линукса.




_______________
  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

7

14.09.2007, 15:48

Ты предлагаешь просто сделать remote frontend под вениками, если я правильно понял. Тогда да, в принципе поток можно принимать по httр, и рендерить спокойно. Единственно - несколько клиентов не подрубишь.
Или я опять не до понял чего? :)




_______________
  • К началу страницы

Epmak

Школьник

Дата регистрации: 26.07.2004

Сообщения: 71

8

14.09.2007, 16:38

Цитата

Со слов пользователя Walery
Ты предлагаешь просто сделать remote frontend под вениками, если я правильно понял. Тогда да, в принципе поток можно принимать по httр, и рендерить спокойно.
Или я опять не до понял чего? :)

Теперь правильно. Как мне кажется доработок должно быть не так много.
Но это писалось 3 года назад c vdr 1.3. И кернелом 2.4

Что-то с тех пор скорей всего поменялось в vdr и какой формат стал у ioctl нужно смотреть. Если что, то разборка OSD ioctl'ов находится в source/UOSD.pas

В принципе все что нужно это взять - это UDVBMain и UOSD и выкинуть все что касается обработки ioctl'ов не относящихся к OSD_SEND_CMD.
Для проверки работы OSD без видео можно выбрать HardwareType: DummyDVB

IP адреса и порты для связи захардкожены на тестовые их наверное нужно поменять.

Следующим этапом можно сделать свой граф с приемом видео.


Цитата

Со слов пользователя Walery
Единственно - несколько клиентов не подрубишь.

Интересный вопрос. Теоретически можно подобный 'левых хак' для OSD сделать для подключаемых клиентов, но об этом нужно дополнительно думать.




_______________

Это сообщение уже редактировалось 1 раз/раза, последний раз пользователем »Epmak« (14.09.2007, 16:39)

  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

9

14.09.2007, 17:49

Ну что, в общем идея неплохая. Особенно если сделать с несколькими клиентами и раздельным управлением. Посмотришь, что там в новом vdr-е нужно патчить? Под винды все построить я попробую. Для начала простейший вариант без обратной связи - http-прием, мпег-декодированние и алфа-блендинг с ОСД на vmr.




_______________
  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

10

14.09.2007, 19:29

посмотрел патчик и скачал virtualstb - буду разбираться, у тебя вроде как все практически есть..
кстати патчик как работает я не понял :) Что-то ты писал про dummy-osd?




_______________
  • К началу страницы

Epmak

Школьник

Дата регистрации: 26.07.2004

Сообщения: 71

11

14.09.2007, 20:16

Цитата

Со слов пользователя Walery
кстати патчик как работает я не понял :)


Ситуация в том, что vdr сосредоточил обращение к OSD в один единственный вызов ioctl и это происходит в методе

Исходный текст

1
void cDvbOsd::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, const void *data)

соответсвенно, я в этом методе после вызова ioctl'а добавил отсылку данных OSD ioctl'а по TCPIP:

Исходный текст

1
+ send_OSD_ioctl(&dc);

соответсвенно данные ioctl'а переводятся из структуры со ссылками в простой общий кусок памяти в виде:

Исходный текст

1
2
3
4
5
6
+ struct ioctl_buffer_t {
+ unsigned int cmd_length;
+ unsigned int additional_data_length;
+ unsigned int cmd_id;
+ unsigned char data[IOCTL_BUFFER_LENGTH];
+ };


потом этот кусок памяти посылается по адресу и порту

Исходный текст

1
2
+ char *servIP = "192.168.0.1";
+ unsigned short ServPort = 8767;

путем вызова функции

Исходный текст

1
void send_data(unsigned char *data, unsigned int data_length, int respose_length) {


Цитата

Со слов пользователя Walery
посмотрел патчик и скачал virtualstb - буду разбираться, у тебя вроде как все практически есть..
Что-то ты писал про dummy-osd?

virtaulstb был задуман как hitech. Предпологалось что DVB hardware работает используя Windows driver и Windows используется для отображения видео. А vdr работает со всем этим в виртуальной машине. Соответсвенно в VirtualSTBViewer'е была реализована куча ioctl не только для OSD но и для Frontenda, Demux'а, что для конкретной задачи не представляет интереса.
VSTBV открывает порт и ждет внешние соединения, которые обрабатывает как ioctl команды.
В VSTBV была поддержка нескольких видов карт (с большой степенью глюкавости), но для конкретной задачи работа с DVB картами не требуется, достаточно только обработки OSD команд.
Когда запускаешь VSTBV в режиме DummyDVB он как раз ничего не
делает с DVB hardware, а только создает простой граф
и обрабатывает OSD ioctl'ы.

Для задачи достаточно скачать VirtualSTBViewer-20040808.zip




_______________
  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

12

14.09.2007, 20:40

Есть нюанс - у меня например на vdr ss-2 и softdevice. там как обрабатывается OSD? во всяком случае, патчик не отрабатывает.
Я правда сильно не ковырял, завтра гляну повнимательнее..




_______________
  • К началу страницы

Epmak

Школьник

Дата регистрации: 26.07.2004

Сообщения: 71

13

15.09.2007, 07:27

Цитата

Со слов пользователя Walery
Есть нюанс - у меня например на vdr ss-2 и softdevice. там как обрабатывается OSD? во всяком случае, патчик не отрабатывает.
Я правда сильно не ковырял, завтра гляну повнимательнее..

Да. Тут случай чуть сложнее.
SS2 dvb kernel driver по понятным причинам не создает OSD device'а.
Поэтому vdr не пытается отсылать ioctl для OSD.
Думаю это все можно обойти создав 'левый' OSD девайс и отключив посылку ioctl'ов в этот девайс, но оставив отсылку данных по TCP.




_______________

Это сообщение уже редактировалось 1 раз/раза, последний раз пользователем »Epmak« (15.09.2007, 07:28)

  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

14

15.09.2007, 13:33

У тебя аськи нет? есть вопросы по mingw32..




_______________
  • К началу страницы

Epmak

Школьник

Дата регистрации: 26.07.2004

Сообщения: 71

15

15.09.2007, 17:28

Цитата

Со слов пользователя Walery
У тебя аськи нет? есть вопросы по mingw32..

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

Однако c cygwin'ом баловался. Даже vdr без плагинов откомпилировать получилось и с некоторыми патчами и ограниченной функциональностью
запустить под прародителем VirtualSTB.
Но это было очень давно. С тех пор я на него не смотрел...




_______________
  • К началу страницы

Walery

Продвинутый

Дата регистрации: 15.12.2003

Сообщения: 175

16

15.09.2007, 18:26

Цитата

Со слов пользователя Epmak

mingw32 я не пользовался.

Однако c cygwin'ом баловался. Даже vdr без плагинов откомпилировать получилось и с некоторыми патчами и ограниченной функциональностью
запустить под прародителем VirtualSTB.
Но это было очень давно. С тех пор я на него не смотрел...


Понятно. Хотел попробовать скомпилить xine под винды - она может в качестве фронтенда работать с xine-lib плагином, с осд.
А готовая версия старенькая, vdr не понимает. Ну да ладно, фиг с ней.




_______________
  • К началу страницы

trantor

Школьник

Дата регистрации: 28.04.2005

Сообщения: 163

Место проживания: Середина Германии

17

18.09.2007, 20:23

VDRMediaClient





_______________
  • К началу страницы

trantor

Школьник

Дата регистрации: 28.04.2005

Сообщения: 163

Место проживания: Середина Германии

18

18.09.2007, 20:45

WinVDRClient





_______________
  • К началу страницы

trantor

Школьник

Дата регистрации: 28.04.2005

Сообщения: 163

Место проживания: Середина Германии

19

18.09.2007, 20:49

FFnetDev + VNC





_______________

Это сообщение уже редактировалось 1 раз/раза, последний раз пользователем »trantor« (18.09.2007, 20:50)

  • К началу страницы

free-x Мужской

Гуру

Дата регистрации: 16.07.2003

Сообщения: 5 960

Пол: Мужской

Место проживания: там, за горизонтом

Увлечения: Семья,Linux, VDR

20

13.12.2007, 14:47





_______________
T90: 28.2E-19.2E-S13E-S9E-S4.8E-S4W
VDR#1: Ubuntu 8.04+VDR-1.7.10+S2API+eHD TeVii S650
VDR#2: Ubuntu 8.04+ArVDR 0.7 SS1 Rev.1.3
VDR#3: Ubuntu 9.04+VDR-1.7.12+S2API+VDPAU(GeForce 8400 GS)+xine-0.9.3 TT S2-3200
А ты помог RuVDRWiki?
  • К началу страницы


Рыбалка    покупка, ремонт, аренда дома или квартиры в Германии

Lr Shop,Jungle Man Parfüm und Colostrum bestellen in Deutschland und Aloe vera gel

Lr Joyce Schmuck

Lr Jungle Man Parfüm



TopList