GMFBridge - жизнеспособное, но сложное решение, более прямой подход, который я реализовывал в прошлом, - это запрос вашего ASF Writer для интерфейса IWMWriterAdvanced2
и настройка пользовательского приемника. В этом интерфейсе у вас есть методы для удаления и добавления приемников в ваш писатель ASF. Автоматически подключенный приемник запишет в указанный вами файл. Один из способов написать, куда вы хотите, это
1.) Удалить все приемники по умолчанию:
pWriterAdv->RemoveSink(NULL);
2.) Зарегистрировать мойку:
pWriterAdv->AddSink((IWMWriterSink*)&streamSink);
Настраиваемый приемник может быть классом, который реализует IWMWriterSink
, что требует реализации методов обратного вызова, которые вызываются, например, когда записывается заголовок ASF (OnHeader(/* [in] */ INSSBuffer *pHeader);
) и когда записывается пакет данных (OnDataUnit(/* [in] */ INSSBuffer *pDataUnit);
) - в затем вы можете писать их в любом месте, например, предлагая дополнительные методы для этого класса, где вы можете указать имя файла, в который хотите записать.
Обратите внимание, что это решение не совсем так, как вы хотели, если вам нужно записать информацию заголовка в каждый из 60-минутных файлов - после начального заголовка вы получите только данные пакета ASF. Обходным путем для этого может быть перезапись начального заголовка перед любыми пакетными данными каждого файла, однако это приведет к созданию неиндексированного (не доступного для поиска) файла ASF.