Silverlight 如何为Microsoft smooth streaming制作复合清单

Silverlight 如何为Microsoft smooth streaming制作复合清单,silverlight,iis,manifest,composite,smooth-streaming,Silverlight,Iis,Manifest,Composite,Smooth Streaming,我是Microsoft Smooth Streaming的新手,对复合清单的制作有疑问。 遵循 我能够制作在Silverlight player中播放的单个剪辑元素的复合清单。 然而,当我尝试添加其他视频的更多剪辑时,播放器停止工作,并且没有给出任何错误信息 我是用手来做这一切的。当我尝试使用Expression Encoder 4 Pro创建这样的视频时,我得到了一个普通的.ismc文件,而不是.csm文件 我的问题是: 制作包含不同视频片段的复合清单的最佳方法是什么? 在编码这些视频时,是否

我是Microsoft Smooth Streaming的新手,对复合清单的制作有疑问。
遵循

我能够制作在Silverlight player中播放的单个剪辑元素的复合清单。
然而,当我尝试添加其他视频的更多剪辑时,播放器停止工作,并且没有给出任何错误信息

我是用手来做这一切的。当我尝试使用Expression Encoder 4 Pro创建这样的视频时,我得到了一个普通的
.ismc
文件,而不是
.csm
文件

我的问题是:

制作包含不同视频片段的复合清单的最佳方法是什么? 在编码这些视频时,是否有任何规范要遵循?或者复合清单的支持对视频格式有任何限制吗

最后一个问题是:有没有一种简单的调试方法(比如验证我的.csm文件)

编辑我自己的解决方案

看起来没人关心这个,但自从我最终解决了这个问题,我把这个写在这里是为了节省别人的时间

为了调试复合清单,我在Visual Studio中构建了一个简单的Silverlight应用程序,并添加了一个简单的函数来报告错误:

MainPage.xaml.cs:

public MainPage()
{
    InitializeComponent();
    this.SmoothPlayer.SmoothStreamingErrorOccurred += new EventHandler<SmoothStreamingErrorEventArgs>(SmoothPlayer_SmoothStreamingErrorOccurred);
}

public void SmoothPlayer_SmoothStreamingErrorOccurred(object sender,
                         SmoothStreamingErrorEventArgs e)
{
    MessageBox.Show("Error: " + e.ErrorCode + "; " + e.ErrorMessage);
}
<c t="", d""> 
<c d="">
def ism2csm(url, ism):
    if ism is None: return csm

    csm = xml.Element('SmoothStreamingMedia', {'MajorVersion':'2', 'MinorVersion':'1', 'Duration':ism.attrib.get('Duration')})
    clip = xml.Element('Clip', {'Url':url, 'ClipBegin':'0','ClipEnd':'0'})
    csm.append(clip) 
    for stream_index in ism.iter('StreamIndex'):
        clip.append(stream_index)

    for stream_index in clip.iter('StreamIndex'):
        t = 0
        last_c = None
        for c in stream_index.iter('c'):
            c.attrib['t'] = str(t)
            t += int(c.attrib.get('d'))
            if last_c is not None: del last_c.attrib['d']
            last_c = c
        if clip.attrib.get('ClipEnd') == '0':
            clip.attrib['ClipEnd'] = str(t)

    return csm