Загрузка MPEG-2 тэгов с помощью WMP
От: fuzz_  
Дата: 23.03.07 13:41
Оценка:
Возникла задача считывания метатагов из MPEG-2 файлов. Известно, что mpeg-2 напрямую не поддерживаются Windows Media Player. Для их воспроизведения используются декодеры сторонних производителей. Когда плееру подаётся файл, он просит декодер разобрать этот файл, а декодер уже считывает битрейт, длину и т.д.
Вопрос 1:
Возможно ли вытянуть с помощью WM SDK эти тэги вообще или без подгрузки стороннего декодера это невозможно?

В приведённом ниже коде делается следующее:
1. получаем интерфейс mediaCollection
2. добавляем в mediaCollection mpeg-2 файл
3. делаем файл текущим
4. пытаемся получить интерфейс IWMPMedia, из которого с помощью функций LoadTags(media) и LoadAdditionalTags(media) выдираем метатаги.

Вопрос 2: Почему в этом коде, когда подсовываешь mpeg-2 функция get_currentMedia считывает только часть необходимых тегов? (может потому что остальные должен декодер считывать?). Зато когда в функцию get_currentMedia подставляешь media, то вылетает assert, понятно откуда, но после assert загружается декодер (у меня ffdshow) и все тэги считываются нормально!!! Правда это всё только в Debug mode, в Release ничего подобного не наблюдается (не считываются тэги).

HRESULT hr;
CComPtr <IWMPPlayer> m_player;
CComPtr<IWMPMediaCollection> mediaCollection;
CComPtr<IWMPMedia> media;
CComPtr<IWMPMedia> currentMedia;

hr = m_player.CoCreateInstance(__uuidof(WindowsMediaPlayer));
if(FAILED(hr)) return;

hr = m_player->get_mediaCollection(&mediaCollection);
if (FAILED(hr)) return;

hr = mediaCollection->add(file_name, &media);
if (FAILED(hr)) return;

hr = m_player->put_currentMedia(media);
if (FAILED(hr)) return;

hr = m_player->get_currentMedia(&currentMedia);
if (FAILED(hr)) return;

hr = LoadTags(currentMedia);
if (FAILED(hr)) return;

hr = LoadAdditionalTags(currentMedia);
if (FAILED(hr)) return;

m_player->close();

PrintTags();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.