2011-11-06 32 views
8

我試圖將音頻和視頻直播從我的電腦傳輸到託管服務上的發佈點。我已經編寫了我認爲應該有的所有代碼(目前只是在小型控制檯應用程序中測試代碼)。代碼本身不會拋出錯誤,它運行得很好,視頻從我的網絡攝像機中被拉出,但是當試圖發送流到發佈點時,系統事件日誌中出現DCOM錯誤「DCOM無法與計算機通信streamwebtown.com使用任何已配置的協議。「 我嘗試使用SDK附帶的實際表達式編碼器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雖然:) –

相關問題