Streamproblem



  • Hi Leute,

    ich habe ein Problem beim streamen. Vermutlich setze ich die Werte einfach falsch ein. Gem. Skript von Mircosoft Encoder sieht dass so aus.

    CComBSTR strServerName("MyWMServer");
        CComBSTR strPubPoint("MyPubPoint");
        CComBSTR strPubTemplate("AnotherPubPoint");
        CComBSTR MyNSCFile("\\\\servername\\share\\MyPubPoint.nsc");
        CComBSTR MyNSCURL("\\\\servername\\share\\PubPoint.nsc");
        CComBSTR MyASXFile("\\\\servername\\share\\MyPubPoint.asx");
    

    Meine fiktiven Werte sind:
    IP: 192.168.1.10 Port 8080
    ServerName: StreamServer
    Freigegebener Ordner: wwwroot
    Kann mir jemand zeigen, wie ich die Werte in den obrigen Code richtig einsetze?
    Habe schon einige Varianten durch, aber anscheinend nicht die Richtige.



  • Kann mir wirklich keiner dabei helfen? 😞



  • Aehm ??? Aegypten ...

    Irgendwie versteh ich die Fragestellung ned ganz :p

    Wass du willst, ist z.B. dass du CComBSTR strServerName("MyWMServer"); so bearbeitest, das nachher in dem CComBSTR "192.168.1.10:8080" oder so steht ???

    oder meinst nachher das zusammenbauen ???

    CComBSTR MyNSCFile(L"\\\\");
    MyNSCFile.AppendBSTR(strServerName);
    MyNSCFile.Append(L"\\");
    MyNSCFile.AppendBSTR(strPath);
    MyNSCFile.Append(L"\\");
    MyNSCFile.AppendBSTR(strPubPoint);
    MyNSCFile.Append(L".nsc");
    

    Ciao ...

    erklaer mal bitte etwas naeher ...

    Ciao ...



  • Also, mein Programm ist ziemlich stark an den Mircosoft Encoder 9 angelehnt.
    Ich mochte damit ein Liveereigniss (z.B. das Bild einer Webcam) zu einen Windows Media Server streamen. Das Bild der Webcam bekomme ich auch. Allerdings läßt es sich nicht streamen. 😞
    Und ich finde den Fehler leider nicht.
    Dabei ist das eigentliche Skript aus der SDK ziemlich eindeutig.

    // Include libraries.
    #include <windows.h>
    #include <atlbase.h>
    #include <comdef.h>
    #include "C:\WMSDK\WMEncSDK9\include\wmencode.h"
    #include <conio.h> // for kbhit()
    
    void main()
    {
        HRESULT hr;
        IWMEncoder2* pEncoder;
        IWMEncSourceGroupCollection* pSrcGrpColl;
        IWMEncSourceGroup* pSrcGrp;
        IWMEncSource* pSrcAud;
        IWMEncSource* pSrcVid;
        IWMEncProfileCollection* pProColl;
        IWMEncProfile* pPro;
        IWMEncBroadcast* pBrdcst;
        IWMEncPushDistribution* pPushDist;
        CComBSTR bstrName = NULL;
        long lCount;
        int i;
    
        // Initialize the COM library and retrieve a pointer
        // to an IWMEncoder interface.
        hr = CoInitialize(NULL);
        if ( SUCCEEDED( hr ) )
        {
            hr = CoCreateInstance(CLSID_WMEncoder,
                NULL,
                CLSCTX_INPROC_SERVER,
                IID_IWMEncoder2,
                (void**) &pEncoder);
        }
    
        // Retrieve the source group collection.
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->get_SourceGroupCollection(&pSrcGrpColl);
        }
    
        // Add a source group to the collection.
        if ( SUCCEEDED( hr ) )
        {
            hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pSrcGrp->AddSource(WMENC_AUDIO, &pSrcAud);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pSrcGrp->AddSource(WMENC_VIDEO, &pSrcVid);
        }
    
        // Add a video and audio source to the source group.
        if ( SUCCEEDED( hr ) )
        {
            hr = pSrcAud->SetInput(CComBSTR("Device://Default_Audio_Device"));
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pSrcVid->SetInput(CComBSTR("Device://Default_Video_Device"));
        }
    
        // Choose a profile from the collection.
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->get_ProfileCollection(&pProColl);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pProColl->get_Count(&lCount);
        }
        for (i=0; i<lCount; i++)
        {
            if ( SUCCEEDED( hr ) )
            {
                hr = pProColl->Item(i, &pPro);
            }
            if ( SUCCEEDED( hr ) )
            {
                hr = pPro->get_Name(&bstrName);
            }
            if (_wcsicmp(bstrName,CComBSTR("Windows Media Video 8 for Local Area Network (384 Kbps)"))==0)
            {
                // Set the profile in the source group.
                if ( SUCCEEDED( hr ) )
                {
                    hr = pSrcGrp->put_Profile(CComVariant(pPro));
                }
                break;
            }
        }
    
        // Specify the push distribution variables, including the Windows Media
        // server name, publishing point, and announcement files.
        // Provide real values for the following placeholders.
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->get_Broadcast(&pBrdcst);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pBrdcst->QueryInterface(IID_IWMEncPushDistribution, (void**)&pPushDist);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->put_PortNumber(WMENC_PROTOCOL_PUSH_DISTRIBUTION, 70);
        }
    
        CComBSTR strServerName("MyWMServer");
        CComBSTR strPubPoint("MyPubPoint");
        CComBSTR strPubTemplate("AnotherPubPoint");
        CComBSTR MyNSCFile("\\\\servername\\share\\MyPubPoint.nsc");
        CComBSTR MyNSCURL("\\\\servername\\share\\PubPoint.nsc");
        CComBSTR MyASXFile("\\\\servername\\share\\MyPubPoint.asx");
    
        // Remove the publishing point when the broadcast is over.
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->put_AutoRemovePublishingPoint(VARIANT_TRUE);
        }
    
        // Set the push distribution variables.
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->put_ServerName(strServerName);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->put_PublishingPoint(strPubPoint);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->put_Template(strPubTemplate);
        }
    
        // Initialize the encoding session.
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->PrepareToEncode(VARIANT_TRUE);
        }
    
        // Generate the announcement file.
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->GenerateMulticastInfoFile(MyNSCFile);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPushDist->GenerateAnnouncementFile(MyNSCURL, MyASXFile);
        }
    
        // Start the encoding process.
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->PrepareToEncode(VARIANT_TRUE);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->Start();
    
            // Stop the encoding process.
            if ( SUCCEEDED( hr ) )
            {
                // Keep the console window open.
                printf("Press a key to stop broadcasting.");
    
                // Wait for a key press.
                while(!kbhit())
                    _asm nop;
    
                hr = pEncoder->Stop();
            }
        }
    }
    

    Wie gesagt, die Audio und Videodaten werden korrekt übergeben, aber beim Streamen bekommt er ab

    // Initialize the encoding session.
        if ( SUCCEEDED( hr ) )
        {
            hr = pEncoder->PrepareToEncode(VARIANT_TRUE);
        }
    

    einen Minuswert für hr zurück. Danach führt das Programm natürlich keine if-Abfrage mehr aus. Ich kann mir eigentlich nur noch erklären, dass ich die Werte für den Server falsch setze (siehe erstes posting).



  • Also eigentlich muß ich nun wissen, wie die Daten übergeben werden

    CComBSTR strServerName("Mein_Stream_Server"); 
    // oder
    CComBSTR strServerName("http://192.168.1.10:8080"); 
    // oder 
    CComBSTR strServerName("\\\\192.168.1.10:8080"); 
    // oder 
    CComBSTR strServerName("192.168.1.10:8080"); 
    // oder ganz anders ???
    // und natürlich in ähnlicher Weise für die anderen Variablen!
    
    CComBSTR strPubPoint("MyPubPoint"); 
    CComBSTR strPubTemplate("AnotherPubPoint"); 
    CComBSTR MyNSCFile("\\\\servername\\share\\MyPubPoint.nsc"); 
    CComBSTR MyNSCURL("\\\\servername\\share\\PubPoint.nsc"); 
    CComBSTR MyASXFile("\\\\servername\\share\\MyPubPoint.asx");
    

    Das wird doch wohl irgenwer wissen, oder???


Anmelden zum Antworten