locked
HTTP POST LiveStream RRS feed

  • Question

  • User1171056509 posted

    Hello,

    After using SSFMuxGetHeader, the function returns SSF_BUFFER.

    I would like to send the structure to my Publishing Point with a HTTP Post packet.

    So I use Libcurl for that ( maybe there are anothers solutions ?).

    CURL_sendToISS(SSF_BUFFER data)
    {

    struct curl_httppost *formpost=NULL;
    struct curl_httppost *lastptr=NULL;

    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "COPYNAME",
    CURLFORM_BUFFER,
    "BUFFER", CURLFORM_BUFFERPTR, data, CURLFORM_BUFFERLENGTH, sizeof(data) + data.cbBuffer,
    CURLFORM_END);
    this->m_curl = curl_easy_init();
    if(this->m_curl != NULL){

    curl_easy_setopt(this->m_curl,CURLOPT_URL, http://servor_adress/*.isml);
    curl_easy_setopt(
    this->m_curl,CURLOPT_HTTPPOST, formpost);

    res = curl_easy_perform(this->m_curl);

    if(res != CURLE_OK){
    printf(
    "Error : Failed curl_easy_setopt in curl_easy_perform\n");
    r
    eturn false;
    }
    curl_easy_cleanup(this->m_curl);
    curl_formfree(formpost);

    }

     

    It seems to not working well. Is there anybody who kows how to use libcurl correctly ?

    Thank.

    Tuesday, June 1, 2010 9:15 AM

Answers

  • User-1542406043 posted

    We highly recommend that you use the Silverlight Media Framework (SMF) player  at http://smf.codeplex.com/ 

    This player contains the most recent release of the Smooth Streaming Client (SSME) that support both H264 and VC1 Smooth Streaming as well as PlayReady encryption.  A version 2 of Silverlight Media Framework will be released shortly that supports additional features such as closed captioning rendering using Timed Text Markup Langauge tracks. 

    The IIS tream is testing exclusively against the SMF player and the Smooth Streaming client currently.

    • Marked as answer by Anonymous Tuesday, September 28, 2021 12:00 AM
    Friday, June 4, 2010 12:22 PM

All replies

  • User-1542406043 posted

    I'm not that familiar with libcurl, but it may help to note that it must be a long running, chunked HTTP post.

     

    Thursday, June 3, 2010 1:08 AM
  • User1171056509 posted

     Thank you.

    Indeed I put in my HTTP Post header "Transfer-Encoding: Chunked" and it seems to work better now.

    I noticed in Microsoft example (pushencoder.exe) the adress to send is "http://ip_servor/publishingpoint.isml/Streams(6068-Streams1).

    What is 6068 is the example ? Is it the number of chuncks ? And Streams1 ?

    In live mode, what do I need to write ?

     

    Thursday, June 3, 2010 4:21 AM
  • User691757969 posted

    I'm pretty sure that the 6068-Streams1 is just a unique stream id and can any value you wish, just make sure it's different for each of your different streams.

    Thursday, June 3, 2010 11:19 AM
  • User-1542406043 posted

    Michael is correct.  The string "6068-Streams1" is just a unique identifer name for that stream.  It's indicating that this is Stream1 and it has a bandwidth of 6068kbps.  You can use whatever you want in that name, it just needs to be a unique identifier per stream.

    Thursday, June 3, 2010 12:11 PM
  • User131230931 posted
    If you're really interested, pushencoder uses the PID (process ID) as part of the unique stream ID and that's the "6068" you saw. Just as John and Michael said, it's just an ID for the stream and you can use whatever you want as long as it's unique.
    Thursday, June 3, 2010 1:30 PM
  • User-1542406043 posted

    I stand corrected.  Sam is right, it is the PID with Push Encoder.  For the Format SDK, we will use the stream name that you give us when you add the stream to the muxer.

    Thursday, June 3, 2010 1:44 PM
  • User1171056509 posted

     Ok thanks for these answears. I explain my case. I would like to create a Live stream (only video for the moment)
    SSFMuxSetOption(m_SSFMuxHandle, SSF_MUX_OPTION_LIVE_MODE, &bEnableLiveMode, sizeof(bEnableLiveMode));

    1st step : I put SPS and PPS into SSFMuxAddStream. After that I call SSFMuxGetHeader and I obtain ManifestLive. I send it to IIS with HTTP Post.

    2nd step : For the moment, I receive only H264 AU. I take only Nalus I,B, or P and I put them in SSFMuxProcessInput. After 50 images in my cases (about 2 seconds), I call SSFMuxProcessOutPut. Aferthat I send to IIS the "chunck".

    I would like now to see my Live Stream on an other PC. So I watched the tutorial for Big Bunny (VOD stream). I create a Publishing point and I push each chunck like I said before. Once my publishing point is in "started" state, I would like to connect to it.

    How can I do that ? I found a file, BlackGlass.html, whick allows me to test a VOD stream. But how can I test a Live stream ?

    In the code of the html page, I need a *.ism file in "mediaSource". What is that in Live mode ? Is there any solution for testing Live stream?

    Friday, June 4, 2010 5:51 AM
  • User691757969 posted

    Yep a live stream uses an isml file so you need to use the name of your publishing point in the mediaSource. eg. http://localhost/publishpoint.isml then you should be able to use the BlackGlass.html to play the live stream. If you haven't yet followed the live smooth stream getting started tutorial I would recommend following this to get a basic setup for testing live streams.

    Also H264 is only supported in Silverlight 3 and later and last time I checked the BlackGlass player is Silverlight 2 so won't be able to play H264 smooth streams. You need to use the SamplePlayer provided in the Smooth Stream Development kit beta 2.

    Friday, June 4, 2010 7:01 AM
  • User1171056509 posted

    In BlackGrass.html : mediaSource="Big Buck Bunny.ism\Manifest" by default.

    In default.html : mediaSource="http://adress/mypublishingpoint.isml/Manifest"

    I don't understand why they are different.

    When I start default.html on a another pc with my internet browser it is asked me to choose a ism (not isml) file (Big Buck Bunny.ism by default).

    In my case, what do I need to do to test my stream ?

    Friday, June 4, 2010 8:29 AM
  • User691757969 posted

    You either need to use BlackGlass.html or Default.html.

    If you set the mediaSource in either of them to be http://adress/mypublishingpoint.isml/Manifest then you should be able to test that live stream. In default.html you will just have to press Start Playing.

     

    There is very little difference between the two webpages. BlackGlass.html is just a webpage with a Silverlight player in it and when you load it it plays whatever video (ism file) the mediaSource is set to in the html file. This means that if you want to change what video to watch you have to change to actually html code.

    Default.html makes things a little easier it first has a setup box where you can select which player to use and what ism file to play. When you press Start Playing it loads the Silverlight player and sets the mediaSource to "Enter text here".ism/Manifest. Where "Enter text here" is whatever you wrote in the setup box.

    Friday, June 4, 2010 10:14 AM
  • User1171056509 posted

     2 Problems :
    - With the Big Buck Bunny example :
    I wrote in the html : mediaSource="http://Server_Name/LiveSmooth/LiveSmoothStream.isml/Manifest"
    and when i Start the default.html, I have an error :
    "http://Server_Name/LiveSmooth/LiveSmoothStream.isml/ManifestBig Buck Bunny.ism/Manifest" System.exception 4001

     

    - With my own liveStream :
    where do I find the ism file ? Is it the thing returns by SSFMuxGetHeader (SSF_BUFFER)

    Friday, June 4, 2010 10:53 AM
  • User691757969 posted

    For the first problem in the html you should see something like

    + PresentationName + ".ism/Manifest\" "

    You need to delete this bit. It comes after the mediaSource.

    I'm not sure what you mean with the second problem. You shouldn't need an ism file for a live stream. You just need to HTTP post things at the server.

    Friday, June 4, 2010 11:37 AM
  • User-1542406043 posted

    We highly recommend that you use the Silverlight Media Framework (SMF) player  at http://smf.codeplex.com/ 

    This player contains the most recent release of the Smooth Streaming Client (SSME) that support both H264 and VC1 Smooth Streaming as well as PlayReady encryption.  A version 2 of Silverlight Media Framework will be released shortly that supports additional features such as closed captioning rendering using Timed Text Markup Langauge tracks. 

    The IIS tream is testing exclusively against the SMF player and the Smooth Streaming client currently.

    • Marked as answer by Anonymous Tuesday, September 28, 2021 12:00 AM
    Friday, June 4, 2010 12:22 PM
  • User1171056509 posted

     I post my datas to the IIS Server with HTTP Post. But afterthat, my question is : how can I now test the Live stream ? In my web browser, what is the adress to write ?

    Monday, June 7, 2010 4:15 AM
  • User1171056509 posted

    I have finally found a way to test. With Visual Web Developer 2010 Express and Silverlight ToolKit 3 I created a little and very simple Player.
    SmoothStreamingSource="http://myadress/mypublishingpoint.isml/Manifest" that's all ! It works with Big Bunny and LiveStreams I found on the web, but for my own Live Stream, it crashes. I searching for the problem in my code.

    Monday, June 7, 2010 11:35 AM
  • User1171056509 posted

     For example, this is my "LiveStream Manifest" returns by SSFMuxGetHeader that I send to IIS, before the first video chunck. Is it ok ?

    POST /LiveTest/testlive.isml/Streams(6068-Stream1) HTTP/1.1
    Host: my IP
    Accept: */*
    Transfer-Encoding: Chunked
    User-Agent: NSPlayer/7.0 IIS-LiveStream/7.0
    Connection: Keep-Alive
    Content-Type: application/x-www-form-urlencoded
    Expect: 100-continue

    703
    ....ftypisml....iso2piff....uuid</....@...S....x....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
     <body>
      <par>
       <ref src="Video0.ismv"/>
      </par>
     </body>
    </smil>...Vuuid...0...../.. ..f....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    <head>
    </head>
    <body>
    <switch>
    <video systemBitrate="2000000">
    <param name="trackID" value="1" valuetype="data" />
    <param name="Subtype" value="" valuetype="data" />
    <param name="Width" value="128" valuetype="data" />
    <param name="Height" value="96" valuetype="data" />
    <param name="systemBitrate" value="2000000" valueType="data" />
    <param name="FourCC" value="AVC1" valueType="data" />
    <param name="MaxWidth" value="128" valueType="data" />
    <param name="MaxHeight" value="96" valueType="data" />
    <param name="CodecPrivateData" value="00000001674d40158d8d2041b6029100000300010000030032e040007a120001e849fc638c08000f4240003d093f8c70ed0b16890000000168ea532480" valuetype="data" />
    </video>
    </switch>
    </body>
    </smil>....moov...xmvhd........~C\n....~C\n............................................................@...................................trak...htkhd........~C\n....~C\n................................................................@........`......mdia...,mdhd........~C\n....~C\n...................&hdlr........vide............Video....Jminf....vmhd...............$dinf....dref............url .......
    stbl....stts............ctts............stsc............stsz................stco............stsd............avc1...........................`.H...H...............................................HavcC..@....0gM@... A............2.@.z....I.c....B@.=.?.p.......h.S$....<mvex....mehd............... trex........................
    0

    Monday, June 7, 2010 12:22 PM
  • User-1542406043 posted

    Your Streams Manifest box does not look right.   The ref in there should have a src value that is the stream URL relative to the publishing point.

    In other words it woul be something like
     <ref src "Streams(My_Named_Stream_Here)

    That tells the server what streams to wait for arrival before starting the publishing point.  Each one of those stream URLs should get a post of the Header and then the publishing point will move to started.

     

    Monday, June 7, 2010 12:56 PM
  • User1171056509 posted

     Ok! In fact, the name of the stream is written in AddStreamToMux. I build a SSF_STREAM_INFO struct.

    swprintf_s( pStreamContext->szArchiveName, // buffer
                    MAX_PATH, //size max
                    ( pStreamContext->eStreamType == AUDIO ) ? L"Audio%d.isma" : L"Video%d.ismv",
                    iStream )

     like in the example from Microsot.

    You say I should write for example :

    swprintf_s( pStreamContext->szArchiveName, // buffer
                    MAX_PATH, //size max
                    L"Streams(6068-Stream1)")

    The name shoud be the same as in the HTTP post field ?

    Tuesday, June 8, 2010 4:49 AM
  • User1171056509 posted

     My Silverlight player crashes just after asking manifest to IIS.

    Tuesday, June 8, 2010 12:02 PM
  • User1980011906 posted

    Hi kus3000,

    It seems you are having some player issues.  But before attacking those, are you sure that your files are being correctly generated?

    How to check this...

    Enable archiving on your live publishing point.  This will archive at:

    [wwwroot]\iismedia\archives\your web site\your app path\your pub point-isml\date-time\Segment001

    While you are publishing, you should see the files being generated, for:

    http://yourserver/yourapppath/yourpubpoint.isml/Streams(XYZ)  and

    SSF_STREAM_INFO ssfStreamInfo.pszSourceFileName = "Streams(XYZ)"

    You should get:

    XYZ.ismv

    When you shut down the stream, it will also produce:

    XYZ.ism

    XYZ.ismc

    If these are not being generated, nevermind the player for now.  This has to work first.  If you copy these out of the archives and into a virtual directory, you should be able to playback the presentation as:

    http://yourserver/yourapppath/yourpubpoint.ism/Manifest

    In the Smooth Streaming Player Dev Kit Beta 2.

     

    Once this works, check that your manifest is being published for live mode.  Simply browse to:

    http://yourserver/yourapppath/yourpubpoint.isml/Manifest

    While you are publishing the stream.  You should see a manifest, simillar in content of the .ismc file.  As you press refresh in your browser, it should add chunks to the xml.  

     

    Let us know if these two checks work, then we can attack the player issues.

     

     

    Tuesday, June 8, 2010 4:06 PM
  • User1980011906 posted

    Yes,

    SSf_STREAM_INFO ssfStreamInfo.pszStreamName = "Streams(XYZ_bitrate1)"

    for

    http://yourserver/yourapppath/yourpubpoint.isml/Streams(XYZ_bitrate1)

     

     

    Tuesday, June 8, 2010 4:12 PM
  • User-1542406043 posted

    Which player are you using?   Is this Silverlight Media Framework player?  What version of the Smooth Streaming Media Element?

    Also, can you get the Manifest and post it here for us to see?

    Tuesday, June 8, 2010 4:20 PM
  • User1171056509 posted

    I'm using Visual Web Developper 2010 Express on XP SP3 with dll I found on http://smf.codeplex.com/releases/view/38820

    I just wrote :
        <Grid x:Name="LayoutRoot" Background="White">
            <p:Player>
                <p:CoreSmoothStreamingMediaElement
                    AutoPlay="True"
                    SmoothStreamingSource="http://adress/testlive.isml/Manifest"
                />
            </p:Player>

        </Grid>

     For testing my live stream.

     

    I push my streams to the Publishing point like that (Wireshark view) :


    POST /adress/testlive.isml/Streams(6068-Stream0) HTTP/1.1
    Host: adress
    Accept: */*
    Transfer-Encoding: Chunked
    User-Agent: NSPlayer/7.0 IIS-LiveStream/7.0
    Connection: Keep-Alive
    Content-Type: application/x-www-form-urlencoded
    Expect: 100-continue
    HTTP/1.1 100 Continue

    70d
    ....ftypisml....iso2piff....uuid</....@...S....x....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
     <body>
      <par>
       <ref src="Streams(6068-Stream0)"/>
      </par>
     </body>
    </smil>...Vuuid...0...../.. ..f....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    <head>
    </head>
    <body>
    <switch>
    <video systemBitrate="2000000">
    <param name="trackID" value="1" valuetype="data" />
    <param name="Subtype" value="" valuetype="data" />
    <param name="Width" value="128" valuetype="data" />
    <param name="Height" value="96" valuetype="data" />
    <param name="systemBitrate" value="2000000" valueType="data" />
    <param name="FourCC" value="AVC1" valueType="data" />
    <param name="MaxWidth" value="128" valueType="data" />
    <param name="MaxHeight" value="96" valueType="data" />
    <param name="CodecPrivateData" value="00000001674d40158d8d2041b6029100000300010000030032e040007a120001e849fc638c08000f4240003d093f8c70ed0b16890000000168ea532480" valuetype="data" />
    </video>
    </switch>
    </body>
    </smil>....moov...xmvhd........~E.
    ....~E.
    ............................................................@...................................trak...htkhd........~E.
    ....~E.
    ................................................................@........`......mdia...,mdhd........~E.
    ....~E.
    ...................&hdlr........vide............Video....Jminf....vmhd...............$dinf....dref............url .......
    stbl....stts............ctts............stsc............stsz................stco............stsd............avc1...........................`.H...H...............................................HavcC..@....0gM@... A............2.@.z....I.c....B@.=.?.p.......h.S$....<mvex....mehd............... trex........................
    0


    HTTP/1.1 200 OK
    Server: Microsoft-IIS/7.5 IISMS/3.0
    Date: Wed, 09 Jun 2010 08:02:16 GMT
    Content-Length: 0


    POST /LiveTestTechnicolor/testlive.isml/Streams(6068-Stream0) HTTP/1.1
    Host: adress
    Accept: */*
    Transfer-Encoding: Chunked
    User-Agent: NSPlayer/7.0 IIS-LiveStream/7.0
    Connection: Keep-Alive
    Content-Type: application/x-www-form-urlencoded
    Expect: 100-continue

    HTTP/1.1 100 Continue

    3ff4
    ....moof....mfhd............traf....tfhd................trun..
    ( chunks ................ )

     

     

     

    Afterthat, my silverlight player tried to connect :

    GET /clientaccesspolicy.xml HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
    If-Modified-Since: Mon, 07 Jun 2010 15:04:24 GMT
    If-None-Match: "0c26b7526cb1:0"
    Host: adress
    Connection: Keep-Alive

    HTTP/1.1 304 Not Modified
    Last-Modified: Mon, 07 Jun 2010 15:04:24 GMT
    Accept-Ranges: bytes
    ETag: "0c26b7526cb1:0"
    Server: Microsoft-IIS/7.5
    Date: Wed, 09 Jun 2010 08:32:05 GMT

    GET /adress/testlive.isml/Manifest HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
    If-None-Match: "5a9460568e94b2"
    Host: adress
    Connection: Keep-Alive


    HTTP/1.1 200 OK
    Cache-Control: max-age=2
    Content-Type: text/xml
    ETag: "5a946ab595f862"
    Server: Microsoft-IIS/7.5 IISMS/3.0
    Date: Wed, 09 Jun 2010 08:39:33 GMT
    Content-Length: 1275

    <?xml version="1.0"?>
    <SmoothStreamingMedia MajorVersion="2" MinorVersion="0" Duration="0" TimeScale="10000000" IsLive="TRUE" LookAheadFragmentCount="2" DVRWindowLength="0">
    <StreamIndex Type="video" SubType="" Chunks="0" TimeScale="10000000" Url="QualityLevels({bitrate},{CustomAttributes})/Fragments(video={start time})">
    <QualityLevel Index="0" Bitrate="2000000" CodecPrivateData="00000001674d40158d8d2041b6029100000300010000030032e040007a120001e849fc638c08000f4240003d093f8c70ed0b16890000000168ea532480" FourCC="AVC1" MaxWidth="128" MaxHeight="96">
    <CustomAttributes>
    <Attribute Name="Height" Value="96"/><Attribute Name="Width" Value="128"/>
    </CustomAttributes>
    </QualityLevel>
    <c t="12747944696957529"/>
    <c t="12747944716937529"/>
    <c t="12747944736917529"/>
    <c t="12747966629033499"/>
    <c t="12747966649013499"/>
    <c t="12747966668993499"/>
    <c t="12747966688973499"/>
    <c t="12747966708953499"/>
    <c t="12747966728933499"/>
    <c t="12747966748913499"/>
    <c t="12747966768893499"/>
    <c t="12747966788873499"/>
    <c t="12747966808853499"/>
    <c t="12747966828833499"/>
    <c t="12747966848813499"/>
    <c t="12747966868793499"/>
    <c t="12747966888773499"/>
    <c t="12747966908753499"/>
    <c t="12747966928993905"/>
    <c t="12747966948973905"/>
    <c t="12747966968953905" d="19580800"/>
    </StreamIndex>
    </SmoothStreamingMedia>

     And then it crashes.

    Wednesday, June 9, 2010 4:33 AM
  • User1171056509 posted

    johndeu

    I have 19980000 of difference between each chunck, is it a problem ? In big bunny, it is 20000000
    In SubType I don't have anything, is it normal ?

    Wednesday, June 9, 2010 5:31 AM
  • User1171056509 posted

     nicolas.drouin

    Yes I obtain 6068-Stream0.ismv.

    Afterthat when I shutdown the publishing point I obtain :
    testlive.ism and testlive.ismc BUT NOT 6068-Stream0.ism and 6068-Stream0.ismc
    I think you made a mistake

    If I read with my player http://yourserver/yourapppath/testlive.ism/Manifest it crashes...
    at the first reception of chuncks, just after asking manifest.


     

    Wednesday, June 9, 2010 10:39 AM
  • User1171056509 posted

      nicolas.drouin

     GET /adress/testlive.ism/QualityLevels(2000000,Height=96,Width=128)/Fragments(video=12748186722589629) HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
    Host: adress
    Connection: Keep-Alive

    HTTP/1.1 404 Not Found
    Content-Type: text/html
    Server: Microsoft-IIS/7.5
    Date: Wed, 09 Jun 2010 16:33:39 GMT
    Content-Length: 1245

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">

    BLA BLA BLA ...

    I don't understand : silverlight asks video=12748186722589629 and when I open testlive.ismc I don't have this chunck.

    I'm totally lost.

    Wednesday, June 9, 2010 12:50 PM
  • User-1542406043 posted

    One issue that I see is that you need an audio Stream in here.  The SSME and SMF 2.0 do not support video only.

    Wednesday, June 9, 2010 6:11 PM
  • User-1542406043 posted

    Also, once you have an audio stream added....

    You mentioned that you were using the SMF player from Codeplex. Can you tell us which version of the player you downloaded?  Was it Silverlight Media Framework v2 (RC1)  or the build from Jan 15?   If it was the Jan 15 build, then it is a very old build and the underlying Smooth Streaming Client SDK was in an early beta release at that time.  

    Thursday, June 10, 2010 1:51 AM
  • User1171056509 posted

     I downloaded the release of the 01/15/2010. I didn"t see there was a more recent release.
    I'm going to try Framework v2 rc1, add an audio stream, and I keep you in touch.

    In v1.1 I need :
    Microsoft.SilverlightMediaFramework.dll
    Microsoft.SilverlightMediaFramework.Player.dll
    Microsoft.Web.Media.SmoothStreaming.dll
    xmlns:p="clr-namespace:Microsoft.SilverlightMediaFramework.Player;assembly=Microsoft.SilverlightMediaFramework.Player"

    In v2 rc1, what do I need ? These are not the same names.
    Microsoft.SilverlightMediaFramework.Core.dll
    Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming.dll


    Thursday, June 10, 2010 4:13 AM
  • User1171056509 posted

    Do you have an example of manifest for AVC/AAC because codecprivatedata(AAC)  is empty for me.
    Look at my new manifests with Video + Audio (returns by SSFMuxGetHeader) :

    POST /adress/testlive.isml/Streams(Stream1) HTTP/1.1
    Host:
    Accept: */*
    Transfer-Encoding: Chunked
    User-Agent: NSPlayer/7.0 IIS-LiveStream/7.0
    Connection: Keep-Alive
    Content-Type: application/x-www-form-urlencded
    Expect: 100-continue
    61b
    ....ftypisml....iso2piff....uuid</....@...S....x....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
     <body>
      <par>
       <ref src="Streams(Stream1)"/>
      </par>
     </body>
    </smil>....uuid...0...../.. ..f....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    <head>
    </head>
    <body>
    <switch>
    <audio systemBitrate="128000">
    <param name="trackID" value="1" valueType="data" />
    <param name="systemBitrate" value="128000" valueType="data" />
    <param name="AudioTag" value="255" valueType="data" />
    <param name="Channels" value="1" valueType="data" />
    <param name="SamplingRate" value="44100" valueType="data" />
    <param name="BitsPerSample" value="16" valueType="data" />
    <param name="PacketSize" value="0" valueType="data" /> // WHERE IS FOURCC = AAC TAG ? ? ?
    <param name="CodecPrivateData" value="" valuetype="data" /> //CODECPRIVATEDATA EMPTY !
    </audio>
    </switch>
    </body>
    </smil>....moov...xmvhd........~G%.....~G%.............................................................@...................................trak...htkhd........~G%.....~G%.................................................................@..............Xmdia...,mdhd........~G%.....~G%....................&hdlr........soun............Sound.....minf....smhd...........$dinf....dref............url ........stbl....stts............ctts............stsc............stsz................stco...........fstsd...........Vmp4a.........................D.....2esds........!........g...................12......<mvex....mehd............... trex........................
    0


    POST adress/testlive.isml/Streams(Stream0) HTTP/1.1
    Host:
    Accept: */*
    Transfer-Encoding: Chunked
    User-Agent: NSPlayer/7.0 IIS-LiveStream/7.0
    Connection: Keep-Alive
    Content-Type: application/x-www-form-urlencoded
    Expect: 100-continue

    72e
    ....ftypisml....iso2piff....uuid</....@...S....x....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
     <body>
      <par>
       <ref src="Streams(Stream1)"/> // WHY TWO REF ? ? ?
       <ref src="Streams(Stream0)"/>

      </par>
     </body>
    </smil>...Xuuid...0...../.. ..f....<?xml version="1.0" encoding="utf-8"?>
    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    <head>
    </head>
    <body>
    <switch>
    <video systemBitrate="150000">
    <param name="trackID" value="2" valuetype="data" />
    <param name="Subtype" value="" valuetype="data" />
    <param name="Width" value="128" valuetype="data" />
    <param name="Height" value="96" valuetype="data" />
    <param name="systemBitrate" value="150000" valueType="data" />
    <param name="FourCC" value="AVC1" valueType="data" />
    <param name="MaxWidth" value="128" valueType="data" />
    <param name="MaxHeight" value="96" valueType="data" />
    <param name="CodecPrivateData" value="000000016742800b8d8d2041b7fe024e02409100000300010000030032e0000249800124c7f18e30000124c0009263f8c70ed0a152400000000168ca432480" valuetype="data" />
    </video>
    </switch>
    </body>
    </smil>....moov...xmvhd........~G&.....~G&.............................................................@...................................trak...htkhd........~G&.....~G&.................................................................@........`......mdia...,mdhd........~G&.....~G&....................&hdlr........vide............Video....Lminf....vmhd...............$dinf....dref............url ........stbl....stts............ctts............stsc............stsz................stco............stsd............avc1...........................`.H...H...............................................JavcC..@....2gB.... A...N.@..........2...I..$...0..$...c.....R@...h.C$....<mvex....mehd............... trex........................
    0
     

     

    AND MY TESTLIVE.ismc

      <?xml version="1.0" ?>
    - <SmoothStreamingMedia MajorVersion="2" MinorVersion="0" Duration="81655929" TimeScale="10000000">
    - <StreamIndex Type="audio" SubType="" Chunks="5" TimeScale="10000000" Url="QualityLevels({bitrate})/Fragments(audio={start time})">
      <QualityLevel Index="0" Bitrate="128000" CodecPrivateData="" FourCC="" AudioTag="255" Channels="1" SamplingRate="44100" BitsPerSample="16" PacketSize="0" />
      <c t="12749005041816708" />
      <c t="12749005062233271" />
      <c t="12749005082646393" />
      <c t="12749005103059515" />
      <c t="12749005123472637" d="20581021" />
      </StreamIndex>
    - <StreamIndex Type="video" SubType="" Chunks="5" TimeScale="10000000" Url="QualityLevels({bitrate},{CustomAttributes})/Fragments(video={start time})">
    - <QualityLevel Index="0" Bitrate="150000" CodecPrivateData="000000016742800b8d8d2041b6029100000300010000030032e0000249800124c7f18e30000124c0009263f8c70ed0a152400000000168ca432480" FourCC="AVC1" MaxWidth="128" MaxHeight="96">
    - <CustomAttributes>
      <Attribute Name="Height" Value="96" />
      <Attribute Name="Width" Value="128" />
      </CustomAttributes>
      </QualityLevel>
      <c t="12749005045427649" />
      <c t="12749005065407649" />
      <c t="12749005085387649" />
      <c t="12749005105367649" />
      <c t="12749005125347649" d="19980400" />
      </StreamIndex>
      </SmoothStreamingMedia>

    Thursday, June 10, 2010 9:19 AM
  • User1980011906 posted

    Hi Kus3000,

    Here are manifest files generated for an H.264/AAC stream (from Axis IP cameras, via SSF SDK, with lots of touch-ups to the streams).

    You will notice that it is normal not to have a CodecPrivateData, nor FourCC for AAC stream.

    It is also normal for the SMIL header to contain to streamsrc descriptors, you are, afterall, sending the server two streams.  I have included the WinHttpTrace for a typical stream (not the same as these manifests).

    These play both as Live streams, and once moved out of the archive folders, as SSF presentations. 

     

    Cam142Live.ismc:

    <?xml version="1.0"?>

    <SmoothStreamingMedia MajorVersion="2" MinorVersion="0" Duration="296664667" TimeScale="10000000">

    <StreamIndex Type="audio" Name="audio" SubType="" Chunks="30" TimeScale="10000000" Url="QualityLevels({bitrate})/Fragments(audio={start time})">

    <QualityLevel Index="0" Bitrate="8000" CodecPrivateData="" FourCC="" AudioTag="255" Channels="1" SamplingRate="16000" BitsPerSample="16" PacketSize="2"/>

    <c t="5477500"/>

    <c t="15078125"/>

    <c t="25318125"/>

    <c t="35558125"/>

    <c t="45798125"/>

    <c t="56038125"/>

    <c t="66198125"/>

    <c t="76518125"/>

    <c t="86678125"/>

    <c t="96998125"/>

    <c t="107238125"/>

    <c t="117478125"/>

    <c t="127718125"/>

    <c t="137958125"/>

    <c t="148198125"/>

    <c t="158438125"/>

    <c t="168678125"/>

    <c t="178918125"/>

    <c t="189157500"/>

    <c t="199398125"/>

    <c t="209638125"/>

    <c t="219878125"/>

    <c t="230118125"/>

    <c t="240358125"/>

    <c t="250598125"/>

    <c t="260758125"/>

    <c t="271078125"/>

    <c t="281318125"/>

    <c t="291558125"/>

    <c t="301798125" d="1919999"/>

    </StreamIndex>

    <StreamIndex Type="video" SubType="" Chunks="24" TimeScale="10000000" Url="QualityLevels({bitrate},{CustomAttributes})/Fragments(video={start time})">

    <QualityLevel Index="0" Bitrate="2000000" CodecPrivateData="0000000167420029e29019077f1180b7010101e1e2445400000000000168ce3c800000000000000000" FourCC="AVC1" MaxWidth="800" MaxHeight="450">

    <CustomAttributes>

    <Attribute Name="Height" Value="450"/>

    <Attribute Name="Width" Value="800"/>

    </CustomAttributes>

    </QualityLevel>

    <c t="5499888"/>

    <c t="17166333"/>

    <c t="32166222"/>

    <c t="42166222"/>

    <c t="57166111"/>

    <c t="72166111"/>

    <c t="87165888"/>

    <c t="97165888"/>

    <c t="112165777"/>

    <c t="122165777"/>

    <c t="137165555"/>

    <c t="147165555"/>

    <c t="157165555"/>

    <c t="172165444"/>

    <c t="187165222"/>

    <c t="197165222"/>

    <c t="212165111"/>

    <c t="227165000"/>

    <c t="237165000"/>

    <c t="252164888"/>

    <c t="262164888"/>

    <c t="277164666"/>

    <c t="287164666"/>

    <c t="302164555" d="2000222"/>

    </StreamIndex>

    </SmoothStreamingMedia>

     

    Cam142Live.ism:

    <?xml version="1.0" encoding="utf-16"?>

    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">

    <head>

    <meta name="clientManifestRelativePath" content="Cam142Live.ismc" />

    </head>

    <body>

    <switch>

    <video src="Cam142Live_2000000_30.ismv" systemBitrate="2000000">

    <param name="systemBitrate" value="2000000" valuetype="data" />

    <param name="Height" value="450" valuetype="data" />

    <param name="trackID" value="1" valuetype="data" />

    <param name="Width" value="800" valuetype="data" />

    </video>

    <audio src="Cam142Live_2000000_30_audio.ismv" systemBitrate="8000">

    <param name="systemBitrate" value="8000" valuetype="data" />

    <param name="trackID" value="2" valuetype="data" />

    <param name="trackName" value="audio" valuetype="data" />

    </audio>

    </switch>

    </body>

    </smil>

    WinHttpTrace:

     17:03:57.687 ::*Session* :: >>>> WinHttp Version 5.1 Build 5.1.2600 Dec 15 2008 14:31:59>>>>Process StreamProcessor.SSF.AMP.exe [2168 (0x878)] started at 17:03:57.687 06/10/2010
    17:03:58.687 ::*Session* :: WinHttpOpen("Streams(Cam142Live_2000000_30)",  (1), "", "", 0x0)
    17:03:58.687 ::*Session* :: WinHttpOpen() returning handle 0xf15000
    17:03:58.687 ::*Session* :: WinHttpConnect(0xf15000, "10.104.78.30", 80, 0x0)
    17:03:58.687 ::*Session* :: WinHttpConnect() returning handle 0xf15100
    17:03:58.687 ::*Session* :: WinHttpOpenRequest(0xf15100, "POST", "SmoothMedia/Cam142Live.isml/Streams(Cam142Live_2000000_30)", "", "", 0x0, 0x00000000)
    17:03:58.687 ::*Session* :: WinHttpCreateUrlA(0x12f3fc, 0x0, 0x1a00000, 0x12f438)
    17:03:58.687 ::*Session* :: WinHttpCreateUrlA() returning TRUE
    17:03:58.687 ::*0000001* :: WinHttpOpenRequest() returning handle 0x19f0000
    17:03:58.687 ::*Session* :: WinHttpOpen("Streams(Cam142Live_2000000_30_audio)",  (1), "", "", 0x0)
    17:03:58.687 ::*Session* :: WinHttpOpen() returning handle 0xf15300
    17:03:58.687 ::*Session* :: WinHttpConnect(0xf15300, "10.104.78.30", 80, 0x0)
    17:03:58.687 ::*Session* :: WinHttpConnect() returning handle 0xf15400
    17:03:58.687 ::*Session* :: WinHttpOpenRequest(0xf15400, "POST", "SmoothMedia/Cam142Live.isml/Streams(Cam142Live_2000000_30_audio)", "", "", 0x0, 0x00000000)
    17:03:58.687 ::*Session* :: WinHttpCreateUrlA(0x12f3fc, 0x0, 0x1a00000, 0x12f438)
    17:03:58.687 ::*Session* :: WinHttpCreateUrlA() returning TRUE
    17:03:58.687 ::*0000002* :: WinHttpOpenRequest() returning handle 0x19f0400
    17:03:58.687 ::*0000001* :: WinHttpSendRequest(0x19f0000, "Transfer-Encoding: Chunked", 0, 0x0, 0, 0, 0)
    17:03:58.687 ::*0000001* :: sending data:
    17:03:58.687 ::*0000001* :: 212 (0xd4) bytes
    17:03:58.687 ::*0000001* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
    17:03:58.687 ::*0000001* :: POST /SmoothMedia/Cam142Live.isml/Streams(Cam142Live_2000000_30) HTTP/1.1
    17:03:58.687 ::*0000001* :: Transfer-Encoding: Chunked
    17:03:58.687 ::*0000001* :: User-Agent: Streams(Cam142Live_2000000_30)
    17:03:58.687 ::*0000001* :: Host: 10.104.78.30
    17:03:58.687 ::*0000001* :: Content-Length: 0
    17:03:58.687 ::*0000001* :: Connection: Keep-Alive
    17:03:58.687 ::*0000001* ::
    17:03:58.687 ::*0000001* ::
    17:03:58.687 ::*0000001* :: <<<<-------- End ----------------------------------------------->>>>
    17:03:58.687 ::*0000001* :: WinHttpSendRequest() returning TRUE
    17:03:58.687 ::*0000001* :: WinHttpWriteData(0x19f0000, 0xf300d0, 1817, 0x12f6c0)
    17:03:58.687 ::*0000001* :: sending data:
    17:03:58.687 ::*0000001* :: 1817 (0x719) bytes
    17:03:58.687 ::*0000001* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
    17:03:58.687 ::*0000001* :: 712
    17:03:58.687 ::*0000001* :: ....ftypisml....iso2piff....uuid</....@...S....x....<?xml version="1.0" encoding="utf-8"?>
    17:03:58.687 ::*0000001* :: <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    17:03:58.687 ::*0000001* ::  <body>
    17:03:58.687 ::*0000001* ::   <par>
    17:03:58.687 ::*0000001* ::    <ref src="Streams(Cam142Live_2000000_30)"/>
    17:03:58.687 ::*0000001* ::    <ref src="Streams(Cam142Live_2000000_30_audio)"/>
    17:03:58.687 ::*0000001* ::   </par>
    17:03:58.687 ::*0000001* ::  </body>
    17:03:58.687 ::*0000001* :: </smil>...0uuid...0...../.. ..f....<?xml version="1.0" encoding="utf-8"?>
    17:03:58.687 ::*0000001* :: <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    17:03:58.703 ::*0000001* :: <head>
    17:03:58.703 ::*0000001* :: </head>
    17:03:58.703 ::*0000001* :: <body>
    17:03:58.703 ::*0000001* :: <switch>
    17:03:58.703 ::*0000001* :: <video systemBitrate="2000000">
    17:03:58.703 ::*0000001* :: <param name="trackID" value="1" valuetype="data" />
    17:03:58.703 ::*0000001* :: <param name="Subtype" value="" valuetype="data" />
    17:03:58.703 ::*0000001* :: <param name="Width" value="800" valuetype="data" />
    17:03:58.703 ::*0000001* :: <param name="Height" value="450" valuetype="data" />
    17:03:58.703 ::*0000001* :: <param name="systemBitrate" value="2000000" valueType="data" />
    17:03:58.703 ::*0000001* :: <param name="FourCC" value="AVC1" valueType="data" />
    17:03:58.703 ::*0000001* :: <param name="MaxWidth" value="800" valueType="data" />
    17:03:58.703 ::*0000001* :: <param name="MaxHeight" value="450" valueType="data" />
    17:03:58.703 ::*0000001* :: <param name="CodecPrivateData" value="0000000167420029e29019077f1180b7010101e1e2445400000000000168ce3c800000000000000000" valuetype="data" />
    17:03:58.703 ::*0000001* :: </video>
    17:03:58.703 ::*0000001* :: </switch>
    17:03:58.703 ::*0000001* :: </body>
    17:03:58.703 ::*0000001* :: </smil>....moov...xmvhd........~G......~G..............................................................@...................................trak...htkhd........~G......~G..................................................................@.... ..........mdia...,mdhd........~G......~G.....................&hdlr........vide............Video....6minf....vmhd...............$dinf....dref............url ........stbl....stts............ctts............stsc............stsz................stco............stsd............avc1......................... ...H...H...............................................4avcC.B@)....gB.)............DT.....h.<............<mvex....mehd............... trex........................
    17:03:58.703 ::*0000001* ::
    17:03:58.703 ::*0000001* :: <<<<-------- End ----------------------------------------------->>>>
    17:03:58.703 ::*0000001* :: WinHttpWriteData() returning TRUE
    17:03:58.703 ::*0000002* :: WinHttpSendRequest(0x19f0400, "Transfer-Encoding: Chunked", 0, 0x0, 0, 0, 0)
    17:03:58.703 ::*0000002* :: sending data:
    17:03:58.703 ::*0000002* :: 224 (0xe0) bytes
    17:03:58.703 ::*0000002* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
    17:03:58.703 ::*0000002* :: POST /SmoothMedia/Cam142Live.isml/Streams(Cam142Live_2000000_30_audio) HTTP/1.1
    17:03:58.703 ::*0000002* :: Transfer-Encoding: Chunked
    17:03:58.703 ::*0000002* :: User-Agent: Streams(Cam142Live_2000000_30_audio)
    17:03:58.703 ::*0000002* :: Host: 10.104.78.30
    17:03:58.703 ::*0000002* :: Content-Length: 0
    17:03:58.703 ::*0000002* :: Connection: Keep-Alive
    17:03:58.703 ::*0000002* ::
    17:03:58.703 ::*0000002* ::
    17:03:58.703 ::*0000002* :: <<<<-------- End ----------------------------------------------->>>>
    17:03:58.703 ::*0000002* :: WinHttpSendRequest() returning TRUE
    17:03:58.703 ::*0000002* :: WinHttpWriteData(0x19f0400, 0xf300d0, 1712, 0x12f6c0)
    17:03:58.703 ::*0000002* :: sending data:
    17:03:58.703 ::*0000002* :: 1712 (0x6b0) bytes
    17:03:58.703 ::*0000002* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
    17:03:58.703 ::*0000002* :: 6a9
    17:03:58.703 ::*0000002* :: ....ftypisml....iso2piff....uuid</....@...S....x....<?xml version="1.0" encoding="utf-8"?>
    17:03:58.703 ::*0000002* :: <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    17:03:58.703 ::*0000002* ::  <body>
    17:03:58.703 ::*0000002* ::   <par>
    17:03:58.703 ::*0000002* ::    <ref src="Streams(Cam142Live_2000000_30)"/>
    17:03:58.703 ::*0000002* ::    <ref src="Streams(Cam142Live_2000000_30_audio)"/>
    17:03:58.703 ::*0000002* ::   </par>
    17:03:58.703 ::*0000002* ::  </body>
    17:03:58.703 ::*0000002* :: </smil>....uuid...0...../.. ..f....<?xml version="1.0" encoding="utf-8"?>
    17:03:58.703 ::*0000002* :: <smil xmlns="http://www.w3.org/2001/SMIL20/Language">
    17:03:58.703 ::*0000002* :: <head>
    17:03:58.703 ::*0000002* :: </head>
    17:03:58.703 ::*0000002* :: <body>
    17:03:58.703 ::*0000002* :: <switch>
    17:03:58.703 ::*0000002* :: <audio systemBitrate="8000" systemLanguage="enn">
    17:03:58.703 ::*0000002* :: <param name="trackID" value="2" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="trackName" value="audio" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="systemBitrate" value="8000" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="AudioTag" value="255" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="Channels" value="1" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="SamplingRate" value="16000" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="BitsPerSample" value="16" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="PacketSize" value="2" valueType="data" />
    17:03:58.703 ::*0000002* :: <param name="CodecPrivateData" value="" valuetype="data" />
    17:03:58.703 ::*0000002* :: </audio>
    17:03:58.703 ::*0000002* :: </switch>
    17:03:58.703 ::*0000002* :: </body>
    17:03:58.703 ::*0000002* :: </smil>....moov...xmvhd........~G......~G..............................................................@...................................trak...htkhd........~G......~G..................................................................@..............Vmdia...,mdhd........~G......~G.....................&hdlr........soun............Sound.....minf....smhd...........$dinf....dref............url ........stbl....stts............ctts............stsc............stsz................stco...........dstsd...........Tmp4a........................>......0esds.................g......>...>..............<mvex....mehd............... trex........................
    17:03:58.703 ::*0000002* ::
    17:03:58.703 ::*0000002* :: <<<<-------- End ----------------------------------------------->>>>
    17:03:58.703 ::*0000002* :: WinHttpWriteData() returning TRUE
    17:04:00.890 ::*0000002* :: WinHttpSendRequest(0x19f0400, "Transfer-Encoding: Chunked", 0, 0x0, 0, 0, 0)
    17:04:00.906 ::*0000002* :: WinHttpSendRequest: error 12019 [ERROR_WINHTTP_INCORRECT_HANDLE_STATE]
    17:04:00.906 ::*0000002* :: WinHttpSendRequest() returning FALSE
    17:04:00.906 ::*0000002* :: WinHttpWriteData(0x19f0400, 0xf3d7e8, 7936, 0x50df4fc)
    17:04:00.906 ::*0000002* :: sending data:
    17:04:00.906 ::*0000002* :: 7936 (0x1f00) bytes
    17:04:00.906 ::*0000002* :: <<<<-------- HTTP stream follows below ----------------------------------------------->>>>
    17:04:00.906 ::*0000002* :: 1ef8
    17:04:00.906 ::*0000002* :: ...$moof....mfhd............traf....tfhd............trun...........,.....................S..............4.......5................................'.............S..
    17:04:00.906 ::*0000002* :: ......

    Regards,

    -Nick

     

    Thursday, June 10, 2010 5:07 PM
  • User1171056509 posted

     This is crazy I pratically have the same manifests!
    So the mistake is somewhere else. I use Visual Web Developer 2010 Express with SmoothStreaming.player found here :

    http://smf.codeplex.com/releases/view/38820

    My version is v1.1 and a 2.0 version exists, but RC1. Maybe v1.1 can't read H264/AAC ? How do you test your stream ?

    I have a question : your chuncks seems to have different sizes. To my side, the duration of my chuncks (video and audio) are 2 seconds.

    Friday, June 11, 2010 9:17 AM
  • User1171056509 posted

    I tested with smooth streaming dev kit beta 2 and it does not work too !
    I push my data to the publishing point.
    I launch IE8 with the adress : http://adress/default.html
    (before I change the mediasource in the file)

    And nothing happened (no sound no image). But this time no crash! It seems to accept H264/AAC chuncks
    The time of the player (in the bottom) is strange : it goes from 0 to 354165:44:59 (in live mode)
    with pushencoder.exe the time is good (0 to 2 minutes for example) but no image, no sound.

    I have the error : "reach the end of known chunk list with 2 consecutive chunk errors..."
    Moreover, with wireshark I see the received chuncks. So the players seems to work.

     I did a mistake somewhere but where? Why nothing is displayed ?

    Differences between you an me :

    *.ism :

    1) I have <audio> then <video>, you have <video> before <audio>. It is important ?

    2) <param name="trackName" value="audio" valuetype="data" />

    How do you obtain that ? I don't have this information in <audio> !

    *.ismc :

    Your PPS : 0000000168ce3c800000000000000000 ( 16 bytes )
    My PPS : 0000000168ca432480 ( 9 bytes ) --------> is it normal ?

    For you video, d="2000222", but the lenght of yout chunk is about 1.5 second.
    For my video, d="19980400" and the lenght is about 2 seconds.

    Your you : <StreamIndex Type="audio" Name="audio" SubType="".......................
    For me : <StreamIndex  Type="audio"  SubType="" ( I don't have Name Tag )

     

    Friday, June 11, 2010 9:36 AM
  • User-1542406043 posted

    Nicolas is likely on a TAP build of the Smooth Streaming Format SDK Beta 2.  We will  be releasing a public drop of Beta 2 later today. That may account for some of the differences in the manifests.

    As for the player - you should really switch to use the now public Smooth Streaming Client 1.0 RTW release for testing H.264/AAC playback. The Beta 2 dev kit that you are using is about 4 months older and lots of bugs were fixed.

    http://www.iis.net/download/SmoothClient

    Your PPS value is suspect. If you can post an output .ismv file from your application someplace we can download, we can run some elementary stream analysis tools to see if your encoding is good or not.   What library are you using for the encoding?  Is it a closed-GOP AVC 1 format elementary stream? It must not be Annex B format - no SPS/PPS NAL units are allowed on the samples or IDR frames

     

    Thursday, June 17, 2010 12:00 PM
  • User1171056509 posted

     Here is the link for my ismv (video).

    ftp://ftp-renn.thmulti.com/incoming/Stream0_150000.zip


    Can you confirm that Smooth Streaming Client 1.0 can't read video without audio stream ? Why ?
    Can we have a radio stream ? (audio only) Why ?

    Thursday, June 17, 2010 1:11 PM
  • User-1542406043 posted

    There is something very wrong with your H.264 video stream. 

    Looking at the elementarty stream in Scenescope, I see that it is encoded as H264 Baseline Profile level 1.1, 128x96 @ 25 fps.
    But the samples appear to be all "P" type frames, and occasionally I see a PPS and SPS NAL Unit.  There are also some DPB codec slice partitions and a couple of SEI NALs.  

    How are you encoding this?   The elementary stream must be closed-GOP (2 seconds recommended) H.264 in AVC1 stream format. It must not be in Annex B format, and must not contain any SPS or PPS NAL units in any of the Samples. 
    PIFF requires that each GOP (Fragment) MUST start with the first sample as an IDR frame, followed by P or B frames in sequence until the next GOP (fragment) which should begin with another IDR frame. 

    In Scenescope this would show up as the following for H264 Baseline profile

     Sample         Type

    1        IDR
    2        P
    3        P
    4        P

    ... (omitted sequence of P's for brevity)
    59     P
    60     P
    61     IDR



     

     

    Thursday, June 17, 2010 3:30 PM
  • User1171056509 posted

     Thank. I use a encoder from my company. My video stream is coded like this way (START CODE between each Nalu in the AU) :

    AU 1 (IDR) : Au delimiter - SPS - PPS - SEI - Nalu I
    AU 2 (P) : Au delimiter - SEI - Nalu P
    AU 3 (P) : Au delimiter - SEI - Nalu P
    .....................
    AU 49 (P) : Au delimiter - SEI - Nalu P
    AU 50 (P) : Au delimiter - SEI - Nalu P
    AU 51 (IDR) : Au delimiter - SPS - PPS - SEI - Nalu I
    AU 52 (P) : Au delimiter - SEI - Nalu P
    .....................

    So in my program, I begin by taking the first SPS/PPS of the AU 1(without start code) and I build my manifest video Live with them (AddStreamToMux then SSFMuxGetHeader and finally HTTP post of the manifest to IIS).
    Then, for each AU, I keep on the Nalu (I or P) without startcode, like you said before.
    For each Nalu I or P, I call SSFMuxProcessInput.
    After 50 AU (2 seconds for us, 25 fps), I call SSFMuxProcessOutPut, and I push my data with HTTP post.
    And then I begin again, with a IDR, without SPS/PPS/SEI/Start code... like you said.
    But it still does not work, even with Smooth Streaming Client v1 and the new ssfsdk.lib v1.0 beta 2.

    I give you a new example, with my video/audio stream (ismv) and my new ism and ismc files (with the new lib). I do not understand how you can find SEI Nalu and other SPS/PPS in my ismv, I check my code, I take care only of P/I Nalus (without start code ;-) )

    ftp://ftp-renn.thmulti.com/incoming/example_stream.zip<o:p></o:p>


    Do you always see the same mistake ?
    Monday, June 21, 2010 12:20 PM
  • User1171056509 posted

     I found something strange with SceneScope !

    I have :
    ftyp
    uuid
    uuid
    ftyp
    uuid
    uuid
    moov
    moof (381 bytes, two uuid box))
    mdat
    moof (381 bytes, two uuid box))
    mdat
    .......
    moof (381 bytes, two uuid box))
    mdat
    moof (320 bytes, one uuid box)
    mdat
    moof (320 bytes, one uuid box))
    mdat
    mfra

    Ok this is correct for the moment... but in each mdat I read :
    Nalu1-Nalu2-Nalu3.............

    But in a real .mp4, each nalu are separated by a 2 bytes length of Nalu, so I should have :
    size1-Nalu1-size2-Nalu2-size3-Nalu3
    Is it true ? I correct the mistake by changing my code :

    Before I did :
    SSF_SAMPLE inputSample;
    inputSample.pSampleData    = nalu (without start code of course)
    inputSample.cbSampleData = naluSize;
    SSFMuxProcessInput....

    changing  by :
    SSF_SAMPLE inputSample;
    inputSample.pSampleData    = naluSize + nalu (without start code of course)
    inputSample.cbSampleData = 2 + naluSize;
    SSFMuxProcessInput....

    It is very very better now......

    I found an other mistake :
    In each moof box of my .ismv, (EXCEPT the both last... I do not know why), there are two uuid boxes in each moof !
    Is that a bug of IIS ? I erased the second uuid with a hexa editor (and of course changing the
    size of the moof box, with 320 bytes = 0x140 for each moof size) and now... I can read my ismv file in SceneScope !
    It is very strang, isn't it?
    And this is not the end...
    When I call :
        hr = SSFMuxProcessOutput(pInstance->m_SSFMuxHandle,
                                    pInstance->m_pStreamContexts[InputIndex].dwStreamIndex,
                                    &outputBuffer);

    And when I write the outputBuffer.pbBuffer on my disk, and then I compare with the ismv file created by IIS, the moof seems
    not to be the same ! ISS adds a second uuid box, which doesn't exit in my outputBuffer.pbBuffer !
    I am using IIS media service 3 and IIS 7.5 on Windows 7.

    Can you confirm this problem ?


    Moreover, I can use "pushencoder.exe" with the .ismv with duplicated uuid (th file which is not readable with SceneScope), but it
    is impossible for the new corrected file (error 0x8007000D) ! ! ! (readable with SceneScope).

    Wednesday, June 23, 2010 6:26 AM