Воспроизведение файлов из сетевого источника
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Чтение из сети принципиально не отличается от чтения локального файла. Приложение передает URL-адрес методу IWMReader::Open объекта чтения, а объект средства чтения обрабатывает сведения о сетевых протоколах. Объект средства чтения использует интеллектуальное управление буфером для обеспечения максимально плавного воспроизведения. Если приложению требуется дополнительный контроль над сетевыми параметрами объекта чтения, они доступны через интерфейсы IWMReaderNetworkConfig и IWMReaderNetworkConfig2 .
Содержимое из сетевого источника относится к одной из следующих двух категорий:
- Потокового. Данные передаются точно вовремя для воспроизведения на локальном компьютере. Серверы, на которых работают службы Windows Media Services, могут предоставлять потоковую передачу данных. Если выполняется потоковая передача содержимого с несколькими битами (MBR), клиент может запросить у сервера другую скорость передачи по мере выполнения потоковой передачи.
- Загрузить. Все данные передаются как можно быстрее, чтобы их можно было сохранить в виде файла на локальном компьютере. Веб-серверы предоставляют скачанные данные. Обмен данными между клиентом и сервером после начала скачивания отсутствует.
Когда объект средства чтения скачивает файл с веб-сервера, он использует метод, называемый последовательной потоковой передачей, который позволяет проигрывателю начать отрисовку содержимого до завершения скачивания. Данные помещается в буфер, чтобы обеспечить непрерывный поток данных для игрока. Такие сведения, как скорость передачи и продолжительность содержимого, используются для определения времени буферизации данных перед их передачей проигрывателю.
Чтобы открыть файл или поток по сети, вызовите метод IWMReader::Open объекта чтения с соответствующим URL-адресом. Open является асинхронным вызовом, поэтому возвращается немедленно. Когда источник будет готов к чтению, объект чтения отправляет WMT_OPENED уведомление в метод обратного вызова IWMStatusCallback::OnStatus приложения. На этом этапе приложение может запросить у читателя режим доставки, вызвав IWMReaderAdvanced2::GetPlayMode. Для сетевого содержимого этот метод возвращает либо WMT_PLAY_MODE_DOWNLOAD, указывающее скачаемое содержимое, либо WMT_PLAY_MODE_STREAMING, указывающее потоковую передачу содержимого.
Чтобы начать чтение файла или потока, вызовите метод IWMReader::Start . Средство чтения отправляет WMT_BUFFERING_START уведомление, когда начинает буферистику содержимого, и уведомление WMT_BUFFERING_STOP о завершении буферизации. Пока средство чтения буферизует содержимое (т. е. между этими двумя уведомлениями), пользователю может потребоваться отобразить ход буферизации. Метод IWMReaderAdvanced2::GetBufferProgress возвращает процент буферизованных данных и предполагаемое время, которое осталось. Для скачанного содержимого можно также вызвать IWMReaderAdvanced2::GetDownloadProgress , чтобы получить ход скачивания. Вызывайте эти методы несколько раз, чтобы обновить дисплей, пока не завершится буферизация. Буферизация может произойти снова во время воспроизведения из-за таких факторов, как перегрузка сети. В этом случае приложение получает другое уведомление WMT_BUFFERING_START.
Когда объект средства чтения начинает воспроизводить содержимое, он отправляет WMT_STARTED уведомление. По мере того как каждый пример декодируется и становится доступным для отрисовки, средство чтения передает его приложению с помощью метода обратного вызова IWMReaderCallback::OnSample . На этом этапе процесс совпадает с процессом воспроизведения локального файла. При остановке воспроизведения средство чтения отправляет WMT_END_OF_STREAMING уведомление.
Связанные темы