2011-11-06 8 views
8

Próbuję przesyłać strumieniowo dźwięk i wideo z komputera do punktu publikacji w usłudze hostowanej. Napisałem cały kod, który moim zdaniem powinien (w tej chwili to tylko kod testowy w małej aplikacji Console). Sam kod nie generuje błędu, działa dobrze, wideo jest pobierane z mojej kamery internetowej, jednak przy próbie wysłania strumienia do punktu publikacji pojawia się błąd DCOM w dziennikach zdarzeń systemowych "DCOM nie był w stanie komunikować się z komputerem streamwebtown.com przy użyciu dowolnego ze skonfigurowanych protokołów. " Próbowałem zrobić to samo, używając rzeczywistej aplikacji klienckiej Expression Encoder 4, która jest dostarczana wraz z SDK, a kanał wideo/audio działa dobrze dla tego samego punktu publikacji. Przeszukałem internet daleko i szeroko, aby sprawdzić, czy ktoś inny napotkał ten problem, ale pojawił się pusty. Pytasz społeczność, czy ma jakieś pomysły?Wyrażenie koder 4 SDK wyrzucając błąd DCOM podczas przesyłania strumieniowego na żywo

Kod z aplikacji:


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

Można to prawdopodobnie spowodowane przez firewall w środku. Do testowania: Najpierw spróbuj uruchomić aplikację jako administrator. Następnie uruchom aplikację z wyłączoną zaporą systemu Windows, na koniec: uruchom aplikację bez zapory (lub najmniejszej ilości) w sieci. – Polity

+0

Dziękuję za odpowiedź, to było moje pierwsze założenie, więc bez powodzenia zamknąłem zaporę ogniową po mojej stronie. –

Odpowiedz

4

znalazłem odpowiedź, to nie było uwierzytelniania przez serwer w ogóle. Więc zmieniłem mój kod na następujący i nagle zadziałało dobrze.


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

Chyba zdajesz sobie sprawę, że nie możesz dodać nagrody dla siebie ... +15 odzyskać reputację w dobrej woli – LamonteCristo

+1

Tak, wiedziałem, że wchodzę w to. To tylko powtórzyć na stronie internetowej, nie tak ważne, jak mogłoby być :) Dzięki za +1 :) –

Powiązane problemy