8

PCからホストされたサービスのパブリッシングポイントにオーディオとビデオをライブでストリーミングしようとしています。必要だと思うすべてのコードを記述しました(現時点では、小さなコンソールアプリでコードをテストするだけです)。コード自体はエラーをスローせず、正常に実行され、ビデオはWebカメラからプルされますが、ストリームをパブリッシングポイントに送信しようとすると、システムイベントログにDCOMエラーが表示されます。「DCOMはコンピューターと通信できませんでした。構成されたプロトコルのいずれかを使用するstreamwebtown.com。」SDKに付属している実際のExpressionEncoder4クライアントアプリケーションを使用して同じことを試みましたが、ビデオ/オーディオフィードは同じパブリッシングポイントで問題なく機能します。私はインターネットを広範囲に検索して、他の誰かがこの問題に遭遇したが、空になったかどうかを確認しました。

アプリケーションからのコード:


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;
}
4

1 に答える 1

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;
    }

于 2011-11-09T17:25:43.100 に答える