Expression Encoder 4 SDK выдает ошибку DCOM во время прямой трансляции
Я пытаюсь транслировать аудио и видео в прямом эфире с моего компьютера на точку публикации размещенного сервиса. Я написал весь код, который, я думаю, должен иметь (на данный момент это всего лишь тестовый код в небольшом консольном приложении). Сам код не выдает ошибку, он работает просто отлично, видео извлекается из моей веб-камеры, однако при попытке отправить поток на точку публикации я получаю сообщение об ошибке DCOM в журналах системных событий "DCOM не смог связаться с компьютером streamwebtown.com, используя любой из настроенных протоколов." Я попытался сделать то же самое, используя настоящее клиентское приложение Expression Encoder 4, которое поставляется с SDK, и видео / аудио канал прекрасно работает на одной и той же точке публикации. Я искал в интернете повсюду, чтобы увидеть, сталкивался ли кто-то еще с этой проблемой, но оказался пустым. Спрашивать сообщество, есть ли у них какие-либо идеи?
Код из приложения:
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;
}
1 ответ
Я нашел ответ, он вообще не был аутентифицирован на сервере. Поэтому я изменил свой код на следующий, и он неожиданно сработал.
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;
}