Как создать составной манифест для гладкой потоковой передачи Microsoft

Я новичок в Microsoft Smooth Streaming и задаю вопросы о создании составных манифестов.
Следуя указаниям здесь.

Мне удалось создать составной манифест одного элемента клипа, который играл в проигрывателе Silverlight.
Однако, когда я пытаюсь добавить больше клипов из других видео, игрок просто перестает работать и не выдаёт никаких ошибок.

И я делаю все это вручную. и когда я пытаюсь использовать Expression Encoder 4 Pro для создания такого видео, я получил обычный файл .ismc вместо файла .csm.

Мои вопросы:

Каков наилучший способ создания составного манифеста, который содержит клипы из разных видеороликов? Существует ли какая-либо спецификация для кодирования этих видео? или поддерживает ли составной манифест любое ограничение на видеоформат?

И последнее: есть ли простой способ его отладки (например, проверка моего .csm файла)?

ИЗМЕНИТЬ мое собственное решение:

Похоже, никто не заботится об этом, но так как я, наконец, решил это, я пишу это здесь, чтобы спасти время других.

чтобы отладить составной манифест, я создал простую программу silverlight в Visual Studio и добавлю простую функцию для сообщения о любой ошибке:

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="">

и вам нужно правильно вычислить значения ClipBegin и ClipEnd.

Ниже приведен пример кода в python для преобразования .ismc в .csm (предположим, что ism ниже представляет собой представление объекта xml.etree.ElementTree содержимого манифеста xml):

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

Ответы