エンコーダSDK 4 - 公開ポイントにプッシュする

EC4 SP2 SDKを使用してC#でアプリケーションをコーディングしています。

ファイルをメディアサーバーの公開ポイントに公開したい。私は検索し、公開ポイントの設定と認証に関して2つの例を検索しましたが、どちらか古いsdkのものか、動作しないもの(そしてコンソール用です)です。基本的に私のアプリケーションは何もエンコードしないかのように何もエンコードしません。 脱気モードでは、ソースファイルとサーバーのプロパティが正しく表示されます。

エンコード処理には、処理に0秒かかります。私はサーバのイベントのログをチェックして、 "セキュリティシステムが受信し、デコードできなかった認証要求"という警告が表示されます。私はそれ以上に壊れる知識はない。どんな助けもありがとう。

これはコードの一部です:

 private void broadcastSourceFileToMediaServer2()
    {             
        using (LiveJob job = new LiveJob())
        {
            String filetoencode = @"c:\temp\niceday.wmv";

            LiveFileSource filesource = job.AddFileSource(filetoencode);
            filesource.PlaybackMode = FileSourcePlaybackMode.Loop;
            job.ActivateSource(filesource);
            job.ApplyPreset(LivePresets.VC1Broadband4x3);

            //don't know which one is good to use 
            job.AcquireCredentials += new EventHandler(job_AcquireCredentials);
            _myUserName = "indes";
            _pw = PullPW("indes");              

            Uri url = new Uri("http://192.168.1.74:8080/live");
            PushBroadcastPublishFormat pubpoint = new PushBroadcastPublishFormat();
            pubpoint.PublishingPoint = url;

            pubpoint.UserName = _myUserName;
            pubpoint.Password = _pw;

            job.PublishFormats.Add(pubpoint);       

            job.PreConnectPublishingPoint();

            job.StartEncoding();
            statusBox.Text = job.NumberOfEncodedSamples.ToString();

            job.StopEncoding();
            job.Dispose();
        }
  }




    public static string _myUserName { get; set; }

    public static SecureString _pw { get; set; }

    //codificação de Password a enviar
    private static SecureString PullPW(string pw)
    {
        SecureString s = new SecureString();
        foreach (char c in pw) s.AppendChar(c);
        return s;
    }

 static void job_AcquireCredentials(object sender, AcquireCredentialsEventArgs e)
    {
        e.UserName = _myUserName;
        e.Password = _pw;
        e.Modes = AcquireCredentialModes.None;
    }
2

4 答え

進歩:

私は、サーバー上で認証する(少なくとも肯定的な監査イベントを得る)ことができました。

私はこれから変わった:

//don't know which one is good to use 
        job.AcquireCredentials += new EventHandler(job_AcquireCredentials);
        _myUserName = "indes";
        _pw = PullPW("indes");              

        Uri url = new Uri("http://192.168.1.74:8080/live");
        PushBroadcastPublishFormat pubpoint = new PushBroadcastPublishFormat();
        pubpoint.PublishingPoint = url;

        pubpoint.UserName = _myUserName;
        pubpoint.Password = _pw;

これに:

        job.AcquireCredentials += new EventHandler(job_AcquireCredentials);
        _myUserName = @"mediaservername\user";
        _pw = PullPW("user_password");              

        Uri url = new Uri("http://192.168.1.74:8080/live");
        PushBroadcastPublishFormat pubpoint = new PushBroadcastPublishFormat();
        pubpoint.PublishingPoint = url;

一方の側に、ユーザー名の前にドメイン(ドメインまたはコンピュータ名)を含める必要があるかどうかがわかる場合。これはサーバー上の失敗した監査イベントを変更したので、手動の資格pubpoint.usernameとpubpoint.Passwordを削除することができました。

今私は、出力形式の例外の不足を扱っているだけです。それに。

2
追加された

SMOOTHストリーミングを使用すると、私は自分のプロジェクトを進めることができましたが、PUBLISHスイッチタイプの部分には、以下をご覧ください。ファイル部分を無視する

internal bool StartStream()
{
    Busy = true;
   //Instantiates a new job for encoding
   // 

    //***************************************Live Stream Archive******************************
    if (blnRecordFromFile)
    {

       //Sets up publishing format for file archival type
        FileArchivePublishFormat fileOut = new FileArchivePublishFormat();



       // job.ApplyPreset(LivePresets.VC1512kDSL16x9);

       //Gets timestamp and edits it for filename
        string timeStamp = DateTime.Now.ToString();
        timeStamp = timeStamp.Replace("/", "-");
        timeStamp = timeStamp.Replace(":", ".");

       //Sets file path and name
        string path = "C:\\output\\";
        string filename = "Capture" + timeStamp + ".ismv";
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);

        fileOut.OutputFileName = Path.Combine(path, filename);

       //Adds the format to the job. You can add additional formats as well such as
       //Publishing streams or broadcasting from a port
        job.PublishFormats.Add(fileOut);

    }
    //******************************END OF Stream PORTION****************************************

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //*************************************** Process Files or Live Stream******************************
    if (blnRecordFromFile)
    {
        job.ApplyPreset(LivePresets.VC1IISSmoothStreaming720pWidescreen);

        job = new LiveJob();
       //Verifies all information is entered
        if (string.IsNullOrWhiteSpace(sourcePath) || string.IsNullOrWhiteSpace(destinationPath))
            return false;

        job.Status += new EventHandler(StreamStatus);

        LiveFileSource fileSource;
        try
        {
           //Sets file to active source and checks if it is valid
            fileSource = job.AddFileSource(sourcePath);
        }
        catch (InvalidMediaFileException)
        {
            return false;
        }

       //Sets to loop media for streaming
       //  fileSource.PlaybackMode = FileSourcePlaybackMode.Loop;

       //Makes this file the active source. Multiple files can be added 
       //and cued to move to each other at their ends
        job.ActivateSource(fileSource);
    }
    //******************************END OF FILE PORTION****************************************


   //Sets up variable for fomat data
    switch (publishType)
    {
        case Output.Archive:
           //Verifies destination path exists and if not creates it
            try
        {
            if (!Directory.Exists(destinationPath))
                Directory.CreateDirectory(destinationPath);
        }
            catch (IOException)
            {
                return false;
            }

            FileArchivePublishFormat archiveFormat = new FileArchivePublishFormat();

           //Gets the location of the old extention and removes it
            string filename = Path.GetFileNameWithoutExtension(sourcePath);

           //Sets the archive path and file name
            archiveFormat.OutputFileName = Path.Combine(destinationPath, filename + ".ismv");
            job.PublishFormats.Add(archiveFormat);
        break;

        case Output.Publish:
           //Setups streaming of media to publishing point 
            job = new LiveJob();

           //Aquires audio and video devices
            Collection devices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            EncoderDevice video = devices.Count > 0 ? devices[0] : null;
            for (int i = 0; i < devices.Count; ++i)
               // devices[i].Dispose();
                devices.Clear();

            devices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
            EncoderDevice audio = devices.Count > 0 ? devices[0] : null;
            for (int i = 1; i < devices.Count; ++i)
                devices[i].Dispose();
            devices.Clear();

           //Checks for a/v devices
            if (video != null && audio != null)
            {


                //job.ApplyPreset(Preset.FromFile(@"C:\Tempura\LivePreset3.xml"));
                job.ApplyPreset(LivePresets.H264IISSmoothStreamingLowBandwidthStandard);
                job.OutputFormat.VideoProfile.SmoothStreaming = true;
                deviceSource = job.AddDeviceSource(video, audio);

               //Make this source the active one
                job.ActivateSource(deviceSource);
            }
            else
            {
                error = true;
            }

            PushBroadcastPublishFormat publishFormat = new PushBroadcastPublishFormat();
            try
        {
           //checks the path for a valid  publishing point
            publishFormat.PublishingPoint = new Uri(destinationPath);

        }
            catch (UriFormatException)
            {
                return false;
            }

           //Adds the publishing format to the job

            try
        {




           //job.ApplyPreset(LivePresets.VC1IISSmoothStreaming480pWidescreen);
            job.PublishFormats.Add(publishFormat);
            job.PreConnectPublishingPoint();
        }
            catch (Exception e)
            {
                MessageBox.Show(e.StackTrace.ToString());
            }

        break;
        default:
        return false;
    }
    job.StartEncoding();

    return true;
}
1
追加された

残念ながら私はコメントするのに十分な担当者がいないので、答えとして書く必要があります。

ライブジョブを開始しているため、ストリーミングするためにstartEncodingの直後にjob.StopEncoding()を呼び出さないでください。通常、エンコーディングを停止するイベントを使用すると思います。エンコードを開始してすぐに停止すると、出力がないか、非常に小さい出力しか得られません。

0
追加された

私はあなたのコードを次のように変更し、うまくいくように見えます。あなたの問題は、あなたがLiveJobクラスのインスタンスを削除したことだと思います。ストリーム全体のエンコードを終了する前に、インスタンスを生かしておく必要があります。使用するパーツを変更してStopEncodingを削除すると、DisposeはOKになります。

    private void broadcastSourceFileToMediaServer2()
    {
        LiveJob job = new LiveJob();
        String filetoencode = @"c:\temp\niceday.wmv";

        LiveFileSource filesource = job.AddFileSource(filetoencode);
        filesource.PlaybackMode = FileSourcePlaybackMode.Loop;
        job.ActivateSource(filesource);
        job.ApplyPreset(LivePresets.VC1Broadband4x3);

        //don't know which one is good to use 
        job.AcquireCredentials += new EventHandler(job_AcquireCredentials);
        _myUserName = "indes";
        _pw = PullPW("indes");              

        Uri url = new Uri("http://192.168.1.74:8080/live");
        PushBroadcastPublishFormat pubpoint = new PushBroadcastPublishFormat();
        pubpoint.PublishingPoint = url;

        pubpoint.UserName = _myUserName;
        pubpoint.Password = _pw;

        job.PublishFormats.Add(pubpoint);       

        job.PreConnectPublishingPoint();

        job.StartEncoding();
        statusBox.Text = job.NumberOfEncodedSamples.ToString();
    }

    public static string _myUserName { get; set; }

    public static SecureString _pw { get; set; }

    //codificação de Password a enviar
    private static SecureString PullPW(string pw)
    {
        SecureString s = new SecureString();
        foreach (char c in pw) s.AppendChar(c);
        return s;
    }

    static void job_AcquireCredentials(object sender, AcquireCredentialsEventArgs e)
    {
        e.UserName = _myUserName;
        e.Password = _pw;
        e.Modes = AcquireCredentialModes.None;
    }
0
追加された