2011-11-06 15 views
8

Sto tentando di trasmettere in streaming audio e video dal mio PC a un punto di pubblicazione su un servizio ospitato. Ho scritto tutto il codice che penso dovrebbe avere (Al momento è solo un codice di prova in una piccola app Console). Il codice stesso non genera un errore, viene eseguito correttamente, il video viene estratto dalla webcam, tuttavia quando si tenta di inviare il flusso al punto di pubblicazione viene visualizzato un errore DCOM nei registri eventi di sistema "DCOM non è stato in grado di comunicare con il computer streamwebtown.com utilizzando uno dei protocolli configurati. " Ho provato a fare la stessa cosa usando l'applicazione client Expression Encoder 4 che viene fornita con l'SDK e il feed video/audio funziona perfettamente nello stesso punto di pubblicazione. Ho cercato su Internet in lungo e in largo per vedere se qualcun altro ha incontrato questo problema ma è venuto fuori vuoto. Chiedendo alla comunità se hanno qualche idea?Expression Encoder 4 SDK che lancia un errore DCOM durante lo streaming live

Codice da Applicazione:


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

Questo può essere probabilmente causato dal firewall nel mezzo. Per i test: prima prova e avvia l'app come amministratore. Quindi esegui l'app con Windows Firewall disattivato, infine: esegui l'app senza alcun firewall (o la minima quantità di) nella rete. – Polity

+0

Grazie per la tua risposta, questa è stata anche la mia prima ipotesi, quindi ho spento il firewall completamente dalla mia parte senza successo. –

risposta

4

ho trovato la risposta, non è stato l'autenticazione sul server a tutti. Così ho cambiato il mio codice al seguente e improvvisamente ha funzionato bene.


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

Immagino tu ti renda conto che non puoi aggiungere una taglia a te stesso ... +15 per recuperare il rappresentante in buona fede – LamonteCristo

+1

Sì, lo sapevo che ci saremmo entrati. E 'solo una replica su un sito web, non così importante come potrebbe essere :) Grazie per il +1 però :) –

Problemi correlati