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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Capture с внешнего устройства, Windows Media Encoder SDK 
:(
    Опции темы
sindi8
Дата 21.9.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

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



Всем привет!

Речь пойдет о захвате видео/аудио с внешнего устройства с использованием WMEncoder SDK. Может конечно я и не совсем по адресу, но пишется просто все это дело на С#.
Итак, грубо говоря, у меня есть видеомагнитофон, аудио и видеовыходы которого подключены к карте аудио/видео захвата, а управление этим магнитофоном производится через COM-порт используя протокол Sony RS422. Так вот - при использовании WMEncoder SDK я настраиваю все параметры - а именно используемое устройство для захвата аудио, видео, профиль и управление. Все работает, мало того - даже делает захват. НО - если мне вдруг взбрело в голову сменить используемое устройство например для захвата аудио - мне не удается выполнить Encoder.PrepareToEncode(true) после изменения параметров по той причине, что у меня не освобождается устройство управления. Вот тут и возникает вопрос - как мне убить это гребаное устройство управления? Может кто-то вдруг по какой-то случайности касался подобных вещей? (Исходники по желанию могу выложить)
PM MAIL   Вверх
stab
Дата 21.9.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Давай исходники, так ни чего не ясно, скорее всего одной строчки не хватает.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
sindi8
Дата 22.9.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

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



Ок. Например вот так:
Код

//Создаю экземпляр энкодера и привязываю к нему GroupCollection
WMEncoder Encoder = new WMEncoder();
IWMEncSourceGroupCollection SrcGrpColl = Encoder.SourceGroupCollection;
//Создаю две группы набора параметров
IWMEncSourceGroup2 SrcGrp1 = (IWMEncSourceGroup2) SrcGrpColl.Add("SG_1");
IWMEncSourceGroup2 SrcGrp2 = (IWMEncSourceGroup2) SrcGrpColl.Add("SG_2");
//Добавляю источники в группы
IWMEncVideoSource2 SrcVid1 = (IWMEncVideoSource2) SrcGrp1.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
IWMEncSource SrcAud1 = SrcGrp1.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);

IWMEncVideoSource2 SrcVid2 = (IWMEncVideoSource2) SrcGrp2.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
IWMEncSource SrcAud2 = SrcGrp2.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
//Указываю используемое устройство аудио и видео (одинаковое в группах)
//_currentVideoDevice - имя видео устройства
//_currentAudioDevice - имя аудио устройства
SrcVid1.SetInput(_currentVideoDevice, "Device", "" );
SrcAud1.SetInput(_currentAudioDevice, "Device", "" );
SrcVid2.SetInput(_currentVideoDevice, "Device", "" );
SrcAud2.SetInput(_currentAudioDevice, "Device", "" );

//Указываю профиль кодирования, _currentProfile - имя
IWMEncProfileCollection ProColl = Encoder.ProfileCollection;
for (int i = 0; i<ProColl.Count; i++)
    if (ProColl.Item( i ).Name == _currentProfile)
    {
        SrcGrp1.set_Profile(ProColl.Item( i ));
        SrcGrp2.set_Profile(ProColl.Item( i ));
        break;
    }

//Добавляю в группы устройства управления
IWMEncDeviceControlCollection DCColl1 = SrcGrp1.DeviceControlCollection;
IWMEncDeviceControlCollection DCColl2 = SrcGrp2.DeviceControlCollection;
//Определяю устройство управления для первой группы
IWMEncDeviceControl DControl1 = DCColl1.Add();
DControl1.SetInput(_currentControlDevice, "DeviceControl", "");

//Делаю первую группу активной
SrcGrpColl.Active = SrcGrp1;
//Применяю параметры
Encoder.PrepareToEncode(true);
//Активизирую устройство управления.
//Если закомментировать следующую строку - все будет работать ок
IWMEncDeviceControlPlugin DCPlugin = (IWMEncDeviceControlPlugin)DControl1.GetDeviceControlPlugin();
//... какие-то действия
Encoder.PrepareToEncode(false);
//Удаляю устройство управления из первой группы
DCColl1.Remove(0); 
DCPlugin = null; //типа того убиваю управление
//Определяю устройство управления для второй группы
IWMEncDeviceControl DControl2 = DCColl2.Add();
DControl2.SetInput(_currentControlDevice, "DeviceControl", "");
//Делаю активной вторую группу
SrcGrpColl.Active = SrcGrp2;
//Пытаюсь применить параметры - ошибка. Отказано в доступе говорит.
Encoder.PrepareToEncode(true);

При немного другой последовательности комманд говорит вот что: It was not possible to find a valid source plug-in for the specified source. Типа того, что а указанного-то устройства управления-то и нету. А это бывает когда устройство уже чем-то занято. Вот и получается, что устройство управления не освобождается. Такая функция должна быть - в готовом Encoder-e от издателей все работает. Что не так? Уже всю голову сломал и убил кучу времени. Буду очень признателен за подсказку.


PM MAIL   Вверх
stab
Дата 22.9.2005, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Попробуй вставить вызов System.Runtime.InteropServices.Marshal.FinalReleaseComObject(DCPlugin) перед строкой DCPlugin = null;


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
sindi8
Дата 23.9.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

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



Именно! ОГРОМНОЕ спасибо!!! То что нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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