Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Захват потокового видео с Интернет, WM-потоки типа mms 
V
    Опции темы
Brain89
Дата 5.5.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



Мне требуется захватить видео из Интернет потоков типа mms://live.rfn.ru/vesti_24 и сохранить на диске. Искал в сети, видимо плохо, потому что толком ничего не нашел. В основном, все примеры захватывают видео с камеры и тюнера, а вот примеров захвата и сохранения Интернет-потока нет. Может, кто-нибудь сталкивался с такой задачей? Или может посоветовать, в каком направлении смотреть? Или есть какой-нибудь готовый компонент для таких целей? Заранее спасибо.


Это сообщение отредактировал(а) Brain89 - 5.5.2011, 13:12
PM   Вверх
jonie
Дата 5.5.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



можно взять проект VLC и посмотреть как в нём - у него даже API есть..


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 5.5.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



2jonie
Я не уверен, но вроде бы VLC не поддерживает захват потокового видео. Открывать - открывает, но не позволяет сохранять. 

Я нашел платный компонент http://www.visioforge.com/video-capture-sdk-net2.html. Может, кто знает его бесплатный аналог или может подсказать, на основе чего он работает?
PM   Вверх
jonie
Дата 5.5.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата(Brain89 @  5.5.2011,  14:12 Найти цитируемый пост)
2jonie
Я не уверен, но вроде бы VLC не поддерживает захват потокового видео. Открывать - открывает, но не позволяет сохранять. 

а я уверенч то умеет)) 
http://forum.videohelp.com/threads/257045-...LC-Media-Player

ну иль mplayer тоже вроде бы умел всё что надо....

вообще своё городить тут сомнительное удовольствие, разве что API юзать

Это сообщение отредактировал(а) jonie - 5.5.2011, 14:15


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 5.5.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



2jonie
Конечно, с нуля писать неохота, но если не будет других вариантов... VLC действительно умеет сохранять, но при этом через раз вылетает. Тем более, разработка идет на .NET, а обертки VLC подключаются с трудом, а потом на каждом шаге выдают кучу ошибок. Мне нужен более стабильный вариант. 
MPlayer смотрится лучше, но обертки для него также не назовешь стабильными. 
PM   Вверх
Fitc
Дата 5.5.2011, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: 3
Всего: 4



прошу прощения за оффтоп, а VLC может также сохранять музыку с интернет потоков?
PM MAIL   Вверх
jonie
Дата 6.5.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Fitc, вообще умеет, но это умеет ничем не хуже и winamp


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 11.5.2011, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



Проблему решил. Если кому будет потом интересно, расскажу как.
Так как найти готовый, но при этом бесплатный контрол я отчаялся, то решил хватать поток с помощью DirectShow, а именно DirectShowLib. Для этого пришлось по верхам ознакомиться с графостроительствомsmile
Итак, вначале создаю необходимые переменные и объекты:
Код

int WM_GRAPHNOTIFY = 0x00008001;
FilterGraph fgFilter; // Основной com-объект
IGraphBuilder igbBuilder; // GraphBuilder интерфейс
IMediaControl mcControl;  // Mediacontrol интерфейс
IMediaEventEx meEventEx; // Mediaevent интерфейс
IPin pinIn; // Пин входа
IPin pinOut; // Пин выхода

Затем их инициализирую:
Код

fgFilter = new FilterGraph();
igbBuilder = (IGraphBuilder)fgFilter;
mcControl = (IMediaControl)fgFilter;
meEventEx = (IMediaEventEx)fgFilter;

А потом создаю два фильтра, один для захвата потока, другой для вывода в файл. Так как потоки Windows Media, то использую WM Reader и WM Writer.
Код

meEventEx.SetNotifyWindow(this.Handle, WM_GRAPHNOTIFY, IntPtr.Zero);
// Фильтр захвата
WMAsfReader asfReader = new WMAsfReader();
IBaseFilter ibfReader = (IBaseFilter)asfReader;
IFileSourceFilter fsIn = (IFileSourceFilter)asfReader;
fsIn.Load(sSourceURL, null);
igbBuilder.AddFilter(ibfReader, "WM Asf Reader"); // Добавление фильтра к графу
// Фильтр вывода
WMAsfWriter asfWriter = new WMAsfWriter();
IBaseFilter ibfWriter = (IBaseFilter)asfWriter;
IFileSinkFilter fsOut = (IFileSinkFilter)asfWriter;
fsOut.SetFileName(sFilename, null); // Задание имени выходного файла
igbBuilder.AddFilter(ibfWriter, "WM Asf Writer"); // Добавление фильтра к графу

Затем нужно соединить два фильтра, для этого пришлось написать свою функцию, возвращающую пин по его имени или части имени.
Код

// Соединение аудио входа и выхода
FindPinByName(ibfReader, null, "Raw Audio", out pinOut); 
FindPinByName(ibfWriter, null, "Audio Input", out pinIn);
igbBuilder.Connect(pinOut, pinIn);
// Соединение видео входа и выхода
FindPinByName(ibfReader, null, "Raw Video", out pinOut);
FindPinByName(ibfWriter, null, "Video Input", out pinIn);
igbBuilder.Connect(pinOut, pinIn);

Осталось только запустить граф на выполнение:
Код

mcControl.Run();

И, когда нужно, остановить захват:
Код

mcControl.Stop();
meEventEx.SetNotifyWindow(IntPtr.Zero, WM_GRAPHNOTIFY, IntPtr.Zero);  

Кода, конечно, многовато для такого простого случая, но зато все понятно и работаетsmile 

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.