2011-11-06 12 views
8

Estoy intentando transmitir audio y video en vivo desde mi PC a un punto de publicación en un servicio alojado. Escribí todo el código que creo que debería tener (en este momento es solo un código de prueba en una pequeña aplicación de consola). El código en sí no arroja un error, funciona bien, el video se extrae de mi cámara web, sin embargo, cuando trato de enviar la transmisión al punto de publicación aparece un error DCOM en los registros de eventos del sistema "DCOM no pudo comunicarse con la computadora streamwebtown.com utilizando cualquiera de los protocolos configurados ". Traté de hacer lo mismo con la aplicación de cliente Expression Encoder 4 que viene con el SDK y la alimentación de video/audio funciona muy bien en el mismo punto de publicación. He buscado en Internet por todas partes para ver si alguien más se ha encontrado con este problema pero ha quedado vacío. Preguntar a la comunidad si tienen alguna idea?Expression Encoder 4 SDK arrojando error DCOM mientras se está transmitiendo en vivo

Código de Aplicación:


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

Esto puede ser causado probablemente por los cortafuegos en el medio. Para probar: Primero intente ejecutar la aplicación como administrador. Luego ejecute la aplicación con el firewall de Windows desactivado, por último: ejecute la aplicación sin ningún firewall (o con la menor cantidad de) en la red. – Polity

+0

Gracias por su respuesta, esa fue mi primera suposición también así que cerré el firewall completamente de mi lado sin éxito. –

Respuesta

4

he encontrado la respuesta, no se autentica en el servidor en absoluto. Así que cambié mi código a lo siguiente y de repente funcionó bien.


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

Supongo que te das cuenta de que no puedes agregar una recompensa para ti ... +15 para recuperar el representante de buena voluntad – LamonteCristo

+1

Sí, sabía que entrar en eso. Es solo una repetición en un sitio web, no tan importante como podría ser :) Gracias por el +1 sin embargo :) –

Cuestiones relacionadas