Вторник, 16.04.2024, 21:39
Приветствую Вас Гость

Не ошибается тот, кто ничего не делает.
Но и ничего не делать - ошибка.

Эмиль Кроткий

Меню сайта
Категории раздела
Работа с библиотеками BASS и DirectShow [14]
Статьи по написанию mp3 плеера, видеоплеера, работе с WEB камерой и т.д.
Форма входа

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


















Тиц
Главная » Статьи » Мультимедиа » Работа с библиотеками BASS и DirectShow

Урок 4.1. Создаем видеоплеер для просмотра Online TV.
Содержание

Создаем видеоплеер для просмотра Online TV

     На этом уроке мы познакомимся с созданием OnLine видеоплеера для просмотра видео интернет трансляций в прямом эфире. Онлайн-ТВ сегодня приобретает все большую популярность. Вот не большой список интернет трансляций:

Россия 24 - mms://live.rfn.ru/vesti_24;

РТР Планета - mms://live.rfn.ru/rtr-planeta;

Маяк ТВ - mms://live.rfn.ru/rmlmed;

РБК ТВ - mms://tv.gldn.net/rbc;

АМТВ - mms://mms.amtv.ru/BizOne;

 
     Несмотря на то, что Microsoft прекратила поддержку формата MMS в пользу RTSP, указатель mms:// в адресе WEB вещания применяется до сих пор.
Сегодня мы с помощь Delphi и DirectShow создадим простейший плеер, позволяющий просматривать ОнЛайн Интернет трансляции.

   
Итак, приступим …

Запускаем Delphi и создаем новое приложение. Размещаем на форме следующие компоненты:

Создание формы на Delphi для OnLine TV плеера.

- Компонент TPanel из вкладки Standard;

- Два компонента TButton из вкладки Standard. Для Button1в свойстве Caption пишем «Добавить», а для Button2 в свойстве Caption--> «Удалить»;

- Компонент TValueListEditor из вкладки Additional. В свойствах KeyOptions -->KeyEdit, KeyAdd, KeyDelete устанавливаем  True. В Options свойство goRowSelect-->True. В свойство ScrollBars-->ssVertical. И в свойстве TitleCaptions-->TStrings в место Key и Value пишем «Название канала» и
«URL адрес канала». В свойство Strings-->TStrings можно сразу внести название каналов и URL адреса каналов.

Внимание!!! Для работы с DirectShow необходимо скачать заголовочные файлы DirectShow API c сайта http://www.clootie.ru/ и поместить их в каталог Delphi\Lib либо добавить путь к каталогу, в котором они находятся в установках Delphi Library Path (Tools->Options->Library Win32->Library Path для Delphi 2010).
Хотя DirectShow скорее всего уже установлен на Вашем компьютере т.к. он входит в стандартную поставку Windows.
Или скачать заголовочные файлы DirectShow можно здесь.

Далее пишем программный код:

В Uses добавляем модули directshow9, ActiveX.

В разделе Type добавляем процедуру:

procedure CreateGraph;

В разделе Var добавляем:

//Интерфейсы
  FGraphBuilder: IGraphBuilder = Nil;
  FMediaControl: IMediaControl = Nil;
  FVideoWindow: IVideoWindow   = Nil;
//каналы
  Url, Name_ch:string;

В разделе implementation описываем код процедуры построения графа


//процедура построения графа
procedure TForm1.CreateGraph;
begin
//освобождаем подключенные интерфейсы
 if Assigned(FMediaControl) then FMediaControl:= NIL;
 if Assigned(FVideoWindow)  then FVideoWindow := NIL;
 if Assigned(FGraphBuilder) then FGraphBuilder:= NIL;

//Выходим если канал не выбран
 if Url='' then exit;

 //получаем интерфейс IGraphBuilder
 CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, FGraphBuilder);

 //вызываем RenderFile - граф фильтров строится автоматически
 if failed(FGraphBuilder.RenderFile(StringToOleStr(AnsiString(Url)), nil)) then
       begin
         showmessage('Ошибка подключения.');
         exit;
       end;

 //получаем интерфейс ImediaControl
 FGraphBuilder.QueryInterface(IID_IMediaControl, FMediaControl);

 //получаем интерфейс IVideoWindow
 FGraphBuilder.QueryInterface(IID_IVideoWindow, FVideoWindow);

 //распологаем окно вывода на Panel1
 FVideoWindow.put_Owner(Panel1.Handle);
 FVideoWindow.put_WindowStyle(WS_CHILD or WS_CLIPSIBLINGS);
 FVideoWindow.put_MessageDrain(Panel1.Handle);
 FVideoWindow.SetWindowPosition(0, 0, Panel1.ClientRect.Right,Panel1.ClientRect.Bottom);

 //запускаем на воспроизведение

 FMediaControl.Run;
end;

Для события OnClick кнопки «Добавить» пишем следующий код:

//Добавление записи в ValueListEditor1
procedure TForm1.Button1Click(Sender: TObject);
var Url1, Name1: string;
begin
 Url1:= inputbox('Введите адрес канала?','Например: mms://live.rfn.ru/vesti_24','');
 if Url1<>'' then begin
      Name1:=InputBox('Введите имя канала?', 'Например: Россия 24','');
      if Name1<>'' then  ValueListEditor1.InsertRow(Name1,Url1,true);
 end;
end;

Для события OnClick кнопки «Удалить» пишем следующий код:

//Удаление записи из ValueListEditor1
procedure TForm1.Button2Click(Sender: TObject);
begin
if ValueListEditor1.RowCount<=2 then exit;
ValueListEditor1.deleterow(ValueListEditor1.Row);
end;

Для события OnClose формы пишем:

//Деинициализация COM
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CoUninitialize;
end;

Для события OnCreate формы пишем:

//Инициализация COM
procedure TForm1.FormCreate(Sender: TObject);
begin
  CoInitialize(nil);
end;

Для события OnShow  формы пишем:

procedure TForm1.FormShow(Sender: TObject);
begin
  if ValueListEditor1.RowCount<>0 then
      Begin
        url:=ValueListEditor1.Cells[1,1];
        Name_ch:=ValueListEditor1.Cells[0,1];
        form1.Caption:=Name_ch;
      End;
end;

Для события OnDblClick компонента ValueListEditor1 пишем следующий код:

//Выбор канала из ValueListEditor1
procedure TForm1.ValueListEditor1DblClick(Sender: TObject);
begin
   url:=ValueListEditor1.Cells[1,ValueListEditor1.Row];
   Name_ch:=ValueListEditor1.Cells[0,ValueListEditor1.Row];
   form1.Caption:=Name_ch;
   //вызов процедуры построения графа
   CreateGraph;
end;

На этом все. Запускаем и тестируем плеер. Кроме OnLine TV можно слушать также и радио OnLine.
Адреса трансляций можно найти в интернете.

Внешний вид OnLine TV плеера на Delphi.

Скачать исходник к уроку можно здесь.
В исходнике добавлена возможность сохранять введенные каналы в Ini файле.

Автор статьи xaramamburu, сайт автора http://basicsprog.ucoz.ru .

В статье использованы материалы с сайта http://raxp.radioliga.com
Онлайн-ТВ плеер своими руками [опубликовано] .






Категория: Работа с библиотеками BASS и DirectShow | Добавил: xaramamburu (11.12.2011)
Просмотров: 12997 | Комментарии: 20 | Теги: Online TV, DirectShow, видеоплеер | Рейтинг: 4.0/4
Всего комментариев: 20
19 leshij-2005  
0
Всегда пишет Ошибка подключения. Уже и библиотеки разные подключал. Не пойму  в чем дело, что может быть? каналы работают если в браузере запустить.

20 xaramamburu  
0
Сложно Вам,что то сказать, потому что вы не пишите какая система у вас установлена, какие конкретно ссылки вы пытаетесь воспроизвести? Этот вариант плеера работает только под Windows XP и воспроизводит только mms потоки. Под Windows Vista и 7(x32)  запустить его с помощью интеллектуального режима построения графа фильтров так и не удалось. Смотрите урок 4.2 там граф строится немного по другому и воспроизведение нормально работало под Windows XP, Vista и 7(х32). Если вам не нужна запись потока, то часть кода для записи можете выбросить.))))))))))))))))

17 саша  
0
А можно вопрос? А ваще так все каналы чтоли идут? Будет ли выводится звук при трансляции?

18 xaramamburu  
0
Нет. Только те, что используют для трансляции mms поток.
Все потоки идут со звуком. К сожалению с момента написания статьи многие адреса mms потоков изменились. Например в место: Россия 24 - mms://live.rfn.ru/vesti_24 сейчас: mms://live.rfn.ru/r24_lq

16 саша  
0
а я эту проблему уже решил с полноэкраным режимом

9 SpySpook  
0
добавил процедуру для того чтобы делать на весь экран но появилась проблема
например запускаю какой либо канал и открываю на весь экран и картинка пропадает но воспроизведение идет
и даже когда выхожу из полно экранного режима картинка также не появляется что делать подскажите smile
могу скинуть саму программу как я делал полно экранный режим smile

10 xaramamburu  
0
Посмотрите как реализован полно экранный режим в уроке 2.2 по видеоплееру. К сожалению разобраться со стандартной функцией DirectShow (Put_FullScreenMode) я так и не смог, по причинам аналогичным вашим. Моя почта xaramamburu@list.ru , если не разберетесь скидывайте ваш проект, будем смотреть.

11 SpySpook  
0
пробовал сделать как сделано в видеоплеере так не работает
проект скинул вам на почту)))))

13 xaramamburu  
0
Посмотрел ваш проект у меня вроде все работает, правда с небольшими глюками при отображении в полно экранном режиме панели управления. Я кнопки и плейлист поместил на одну панель, глюки исчезли. Если проблема была только в этом, то отправляю вам исправленный вариант. cool

12 SpySpook  
0
да кстати нашел тут книжку по поводу полно экранного режима
вот ссылочка если есть желание можете почитать))))
http://onuchin.web.cern.ch/onuchin/DShow/Levchuk/Chapter4.pdf

14 xaramamburu  
0
Спасибо. Я уже это все читал при написании уроков по DirectShow. К сожалению там все в общем виде, а хотелось бы с конкретными примерами и желательно на Delphi.

15 саша  
0
это связано с тем что у тебя форма пересоздается. Посмотри в теме ниже.

3 SpySpook  
0
аааа ну тогда добавте в урок))))) smile
спосибки за помощь
а то я делал через компонент WebBrowser

1 SpySpook  
0
у меня выдает ошибку на directshow9((((

2 xaramamburu  
1
Для работы с DirectShow необходимо скачать заголовочные файлы DirectShow API c сайта http://www.clootie.ru/ и поместить их в каталог Delphi\Lib либо добавить путь к каталогу, в котором они находятся в установках Delphi Library Path (Tools->Options->Library Win32->Library Path для Delphi 2010). smile

4 SpySpook  
0
а какой именно из них качать для delphi 7 там их уйма)))))

5 xaramamburu  
1
Clootie_DirectX92_Small.zip - я скачивал этот. Хотя у меня установлен еще и пакет компонентов DsPack в который DirectShow уже входит.

6 SpySpook  
0
хорошо спасибо дальше думаю сам разберусь)))))))

7 SpySpook  
0
теперь ругается на вот это CoCreateInstance пишет то что типа такого не существует
вот сам код ошибки
Build
[Error] Unit1.pas(53): Undeclared identifier: 'CoCreateInstance'
[Error] Unit1.pas(53): Undeclared identifier: 'CLSCTX_INPROC_SERVER'
[Error] Unit1.pas(120): Undeclared identifier: 'CoInitialize'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

8 xaramamburu  
0
Извиняюсь, добавь в Uses модуль ActiveX;

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 585
Уголок общения



Copyright MyCorp © 2024Конструктор сайтов - uCoz