На этом уроке мы познакомимся с созданием 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 и создаем новое приложение. Размещаем на форме следующие компоненты:
- Компонент 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 можно здесь.
В разделе 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;
//вызываем RenderFile - граф фильтров строится автоматически if failed(FGraphBuilder.RenderFile(StringToOleStr(AnsiString(Url)), nil)) then begin showmessage('Ошибка подключения.'); exit; end;
//распологаем окно вывода на 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. Адреса трансляций можно найти в интернете.
Скачать исходник к уроку можно здесь. В исходнике добавлена возможность сохранять введенные каналы в Ini файле.
Автор статьи xaramamburu, сайт автора http://basicsprog.ucoz.ru.
Сложно Вам,что то сказать, потому что вы не пишите какая система у вас установлена, какие конкретно ссылки вы пытаетесь воспроизвести? Этот вариант плеера работает только под Windows XP и воспроизводит только mms потоки. Под Windows Vista и 7(x32) запустить его с помощью интеллектуального режима построения графа фильтров так и не удалось. Смотрите урок 4.2 там граф строится немного по другому и воспроизведение нормально работало под Windows XP, Vista и 7(х32). Если вам не нужна запись потока, то часть кода для записи можете выбросить.))))))))))))))))
Нет. Только те, что используют для трансляции mms поток. Все потоки идут со звуком. К сожалению с момента написания статьи многие адреса mms потоков изменились. Например в место: Россия 24 - mms://live.rfn.ru/vesti_24 сейчас: mms://live.rfn.ru/r24_lq
добавил процедуру для того чтобы делать на весь экран но появилась проблема например запускаю какой либо канал и открываю на весь экран и картинка пропадает но воспроизведение идет и даже когда выхожу из полно экранного режима картинка также не появляется что делать подскажите могу скинуть саму программу как я делал полно экранный режим
Посмотрите как реализован полно экранный режим в уроке 2.2 по видеоплееру. К сожалению разобраться со стандартной функцией DirectShow (Put_FullScreenMode) я так и не смог, по причинам аналогичным вашим. Моя почта xaramamburu@list.ru , если не разберетесь скидывайте ваш проект, будем смотреть.
Посмотрел ваш проект у меня вроде все работает, правда с небольшими глюками при отображении в полно экранном режиме панели управления. Я кнопки и плейлист поместил на одну панель, глюки исчезли. Если проблема была только в этом, то отправляю вам исправленный вариант.
да кстати нашел тут книжку по поводу полно экранного режима вот ссылочка если есть желание можете почитать)))) http://onuchin.web.cern.ch/onuchin/DShow/Levchuk/Chapter4.pdf
Спасибо. Я уже это все читал при написании уроков по DirectShow. К сожалению там все в общем виде, а хотелось бы с конкретными примерами и желательно на Delphi.
Для работы с DirectShow необходимо скачать заголовочные файлы DirectShow API c сайта http://www.clootie.ru/ и поместить их в каталог Delphi\Lib либо добавить путь к каталогу, в котором они находятся в установках Delphi Library Path (Tools->Options->Library Win32->Library Path для Delphi 2010).
теперь ругается на вот это 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'