[Helix-client-dev] Progressive Download

[Helix-client-dev] Progressive Download

Jérémy Garnier garnier.gerpi at wiz4com.com
Mon Sep 11 05:09:11 PDT 2006


Hi all,

Actually, with the bif branch hxclient_1_5_0_cayennes and the profile
helix-client-all-defines (with target splay or filesystem_httplite), we have
a one time progressive download. It uses filesystem/http.
It isn't possible to get filesystem/httplite to make permanent progressive
download?
Thanks,

Jérémie

-----Message d'origine-----
De : helix-client-dev-bounces at helixcommunity.org
[mailto:helix-client-dev-bounces at helixcommunity.org] De la part de Milko
Boic
Envoyé : jeudi 7 septembre 2006 09:56
À : helix-client-dev at helixcommunity.org
Objet : [Helix-client-dev] CR-Client: Start-up performance 2 

Modified by: milko at real.com
Date: 9:06:06
Project: Atlas

Synopsis: Player core start-up performance2

Overview:
---> In order to speed up the start-up, a much more aggressive approach is 
employed:
1.) As soon as video stream pushdown is met (FastStart enabled), the 
buffering for that stream is stopped.  The source (sourceInfo) is now 
change not to retrieve events from the streams that fulfilled the 
buffering.  This saves CPU from processing (decoding) video after the 
initial frame has been decoded and allows audio to queue faster.

2.) The above change often results in playback resuming with truly the 
minimum data present in audio/video devices.  In order to prevent immediate 
DryNotifications from the audio sessions, an additional level of audio 
queuing in audio session is defined for start-up:
m_ulMinBlocksToBeQueued         (new in meaning but not in name)
m_ulMinBlocksToBeQueuedAtStart  (used to be same as m_ulMinBlocksToBeQueued)
m_ulTargetBlocksToBeQueued      (used to be confusingly named 
m_ulMinBlocksToBeQueued)

The new meaning of theses variables is as follows:
m_ulMinBlocksToBeQueued - the minimum number of audio blocks that must be 
present in audio device at any given time or time-line will halt (rebuffer)
m_ulMinBlocksToBeQueuedAtStart - the minimum number of audio blocks that 
must be present in audio device for playback to start
m_ulTargetBlocksToBeQueued - number of audio blocks in audio device that is 
desirable to build up

These values ae computed based on the following pushdown setting in 
milliseconds:
MinimumPushdown			- normally set to 100ms
MimimumStartupPushdown		- normally set to 150ms
TargetPushdown			- normally set to >=200ms (1000ms on non
MIN_HEAP builds)

The following preferences can override the pushdown values:
"MinimumAudioPushdown"
"MinimumAudioStartupPushdown"
"TargetAudioPushdown"

3.) In order to prevent CPU spiking immediately after fulfilling 
MimimumStartupPushdown in attempt to fill up to the TargetPushdown, the 
filling of audio device is restricted by m_ulMaxBlocksToPlayPerGranule.  It 
is set to 2 which means that audio buffer will build in audio device about 
twice as fast as playback time.  This is further increased by 
over-scheduling (already implemented) the servicing of audio device by 40 - 
60%.

m_ulMaxBlocksToPlayPerGranule can be overridden by 
"MaxBlocksToPlayPerGranule" preference.

4.) Note: splay spends significant time printing file and stream 
headers.  Depending on content, delays of 450ms have been observed.  As 
this is done of the platform scheduler, this action starves any scheduled 
processed in the engine (e.g. servicing of audio device).  Since above 
change starts playback at only about 150ms in the audio device, break-ups 
in audio can be encountered.  The issues is splay code.  It has to be 
changed to not block the scheduler for such extensive period of time.


---> This change also includes a correction to dtdriver audio resampler 
output buffer reduction computation when there isn't enough data to fill 
the entire output buffer. 	


---> This change also includes previously submitted "Player core yielding 
and quick seek performance":

That change streamlines thread-hopping the core performs on start-up for 
the purpose of having various actions performed on different threads 
(AudioPlayer setup on interrupt thread, audio device resumption on system 
thread).

When a need for hop to a different thread is detected, player main loop 
(ProcessIdle) is immediately rescheduled to an appropriate thread.  Other 
threads are not scheduled.

This also includes a correction in file source which registers the source 
that is added on the fly.  Previously, local file source were not 
registered which resulted in non-functional fast start and failure to 
account for used bandwidth.


Files Modified:
/client/audiosvc/hxaudses.cpp,v
/client/audiosvc/pub/hxaudses.h,v
/client/core/basgroup.cpp,v
/client/core/hxflsrc.cpp,v
/client/core/hxplay.cpp,v
/client/core/hxsrc.cpp,v
/client/core/hxstrm.cpp,v
/client/core/srcinfo.cpp,v
/client/core/pub/hxplay.h,v
/client/core/pub/hxstrm.h,v
/datatype/tools/dtdriver/decoder/audio/amixer.cpp,v

Image Size and Heap Use impact (Client -Only):
next to none

Platforms and Profiles Affected:
all

Distribution Libraries Affected:
none

Distribution library impact and planned action:
n/a

Platforms and Profiles Build Verified:
win32-i386-vc7, helix-client-all-defines

Platforms and Profiles Functionality verified:
win32-i386-vc7, helix-client-all-defines

Branch:
HEAD




More information about the Helix-client-dev mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.