2011-11-06 8 views
8

ホストされているサービスのパブリッシングポイントに自分のPCからオーディオとビデオをストリーミングしようとしています。私はそれが持っている必要があると思うすべてのコードを書いた(現時点では、小さなコンソールアプリケーションのテストコードです)。コード自体はエラーを発生させず、正常に動作し、ビデオは私のウェブカメラから取り出されますが、パブリッシングポイントにストリームを送信しようとすると、システムイベントログにDCOMエラーが表示されます。 "DCOMはコンピュータと通信できませんでした設定されたプロトコルのいずれかを使用してstreamwebtown.com。 SDKに付属している実際のExpression Encoder 4クライアントアプリケーションを使用して同じことをしようとしましたが、ビデオ/オーディオフィードは同じ公開ポイントでうまく動作します。 私は、誰かがこの問題に遭遇したが、空になっているかどうかを確認するために、インターネットを広範囲に検索しました。彼らにアイディアがあればコミュニティに尋ねる?アプリケーションからExpression Encoder 4 SDKライブストリーミング中にDCOMエラーが発生する

コード:


static void Main(string[] args) 
{ 
    EncoderDevice video = EncoderDevices.FindDevices(EncoderDeviceType.Video).Count > 0 ? EncoderDevices.FindDevices(EncoderDeviceType.Video)[0] : null; 
    EncoderDevice audio = EncoderDevices.FindDevices(EncoderDeviceType.Audio).Count > 0 ? EncoderDevices.FindDevices(EncoderDeviceType.Audio)[0] : null; 
    LiveJob job = new LiveJob(); 
    if (video != null && audio != null) 
    { 
     LiveDeviceSource source = job.AddDeviceSource(video, audio); 
     job.ActivateSource(source); 
     PushBroadcastPublishFormat publishingPoint = new PushBroadcastPublishFormat(); 
     publishingPoint.PublishingPoint = new Uri("http://streamwebtown.com/abc"); 
     publishingPoint.UserName = "user"; 
     publishingPoint.Password = PullPW("Stream"); 
     job.ApplyPreset(LivePresets.VC1Broadband16x9); 
     job.PublishFormats.Add(publishingPoint); 
     job.StartEncoding(); 

     Console.ReadKey(); 
     job.StopEncoding(); 
    } 
} 

private static SecureString PullPW(string pw) 
{ 
    SecureString s = new SecureString(); 
    foreach (char c in pw) s.AppendChar(c); 
    return s; 
} 
+0

これは、おそらく途中でファイアウォールによって引き起こされる場合があります。テストのために:まず、管理者としてアプリを試してみてください。最後に、Windowsファイアウォールをオフにしてアプリを実行します。ファイアウォールを使わずに(または最小限の)アプリを実行します。 – Polity

+0

あなたの返事をお寄せいただきありがとうございます。それは私の最初の前提でしたので、私はファイアウォールを私の側で完全にシャットダウンしました。 –

答えて

4

私は答えを見つけたが、それは、すべてのサーバーに対して認証されませんでした。私のコードを次のように変更したところ、突然うまくいきました。


static void Main(string[] args) 
     {
EncoderDevice video = EncoderDevices.FindDevices(EncoderDeviceType.Video).Count > 0 ? EncoderDevices.FindDevices(EncoderDeviceType.Video)[0] : null; EncoderDevice audio = EncoderDevices.FindDevices(EncoderDeviceType.Audio).Count > 0 ? EncoderDevices.FindDevices(EncoderDeviceType.Audio)[0] : null; LiveJob job = new LiveJob(); job.AcquireCredentials += new EventHandler(job_AcquireCredentials); if (video != null && audio != null) { LiveDeviceSource source = job.AddDeviceSource(video, audio); job.ActivateSource(source); PushBroadcastPublishFormat publishingPoint = new PushBroadcastPublishFormat(); publishingPoint.PublishingPoint = new Uri("http://streamwebtown.com/abc");

  WindowsMediaOutputFormat wmof = new WindowsMediaOutputFormat(); 
      VideoProfile vProfile = new AdvancedVC1VideoProfile(); 
      AudioProfile aProfile = new WmaAudioProfile(); 
      wmof.VideoProfile = vProfile; 
      wmof.AudioProfile = aProfile; 

      job.ApplyPreset(LivePresets.VC1Broadband16x9); 
      job.PublishFormats.Add(publishingPoint); 
      job.OutputFormat = wmof; 
      job.PreConnectPublishingPoint(); 
      job.StartEncoding(); 
      //After finished encoding dispose of all objects. 
      Console.ReadKey(); 
      job.StopEncoding(); 
      job.Dispose(); 
      video.Dispose(); 
      audio.Dispose(); 
      source.Dispose(); 
     } 
    } 

    static void job_AcquireCredentials(object sender, AcquireCredentialsEventArgs e) 
    { 
     e.UserName = "user"; 
     e.Password = PullPW("Stream"); 
     e.Modes = AcquireCredentialModes.None; 
    } 

    private static SecureString PullPW(string pw) 
    { 
     SecureString s = new SecureString(); 
     foreach (char c in pw) s.AppendChar(c); 
     return s; 
    } 

+2

あなた自身に奨励金を加えることができないことに気がついたと思います。+15のれんで代理人を救済するために – LamonteCristo

+1

ええ、私はそれに入ることを知っていました。それはウェブサイト上のちょうど反例ですが、重要ではありません:)ありがとう+1ありがとう:) –

関連する問題