При настройке читателя, вы можете выбрать, какие потоки будут доставляться при чтении сэмплов. Часто вы не хотите выбирать поток. Примером может служить фильм с дополнительными звуковыми потоками (испанский, французский или, возможно, комментарий режиссера). В результате в большинстве случаев выбор временного потока выполняется следующим образом:
// error checking omitted for brevity
hr = reader->SetCurrentMediaType((DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, nullptr, audioMediaType);
hr = reader->SetStreamSelection((DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, true);
Однако, если вы посмотрите на SetStreamSelection первый параметр принимает либо использованное выше перечисление, либо конкретный индекс потока.
// 0–0xFFFFFFFB <-- The zero-based index of a stream.
// 0xFFFFFFFC <-- MF_SOURCE_READER_FIRST_VIDEO_STREAM
// 0xFFFFFFFD <-- MF_SOURCE_READER_FIRST_AUDIO_STREAM
// 0xFFFFFFFE <-- MF_SOURCE_READER_ALL_STREAMS
// 0xFFFFFFFE <-- MF_SOURCE_READER_ANY_STREAM
// 0xFFFFFFFF <-- MF_SOURCE_READER_INVALID_STREAM_INDEX
Я никогда не использовал SharpDX, но это перечисление задокументировано здесь. Что касается видео, иногда доступны дополнительные видеопотоки (обычно скрытые субтитры).
При чтении примеров используйте обратный вызов или синхронно обратите особое внимание на индекс потока и соответствующим образом обработайте образец.
Вы также можете найти эти ответы ценными или интересными:
Совокупный медиа-источник
MP4 IMFSinkWriter
Добавление образца аудио к видео
Создание закодированного видео NV12
Конфигурация IMFSinkWriter
IMFSinkWriter Использование ЦП
Надеюсь, это поможет.
person
Jeff
schedule
24.05.2015