May 31, 2012 at 12:02 PM
Edited May 31, 2012 at 12:41 PM
OK, I think I know what is going on but it still don't know how to fix this issue
I debugged the source code of different plugins from the media framework.
SmoothStreamingMediaElement does not always fire the ManifestReady when streaming source is changed.
Long story(it makes more sense probably if you read it in the reversed direction):
1. LogReceived event handler is called by LoggingService.Current.Log( )
2. This in turn is called by HealthMonitorLogger::FlushLogs() and by HealthMonitorLogger::SendLog() . HealthMonitorLogger is a class from Microsoft.SilverlightMediaFramework.Plugins.Monitoring.dll
HealthMonitorLogger calls FlushLogs() on the HealthMonitor::EdgeServerCompleted event handler. HealthMonitor is a class from Microsoft.SilverlightMediaFramework.Diagnostics.dll
HealthMonitorLogger calls HealthMonitorLogger::SendLog() only when HealthMonitor::IsEdgeServerComplete is true(see below how it's set)
3. EdgeServerCompleted is fired by the HealthMonitor::SmoothStreamingSourceChanged() method
This method sets synchronously or asynchronously(depending on edgeserverrules in config) the HealthMonitor::IsEdgeServerComplete to true
4. HealthMonitor::SmoothStreamingSourceChanged() method is in turn called by HealthMonitor::mediaElement_ManifestReady event handler
5. HealthMonitor::mediaElement_ManifestReady is the ManifestReady event handler of the SmoothStreamingMediaElement class.
It looks like SmoothStreamingMediaElement does not fire the ManifestReady when streaming source is changed.
Any ideas, any workarounds?