Expression Encoder SDKを触ってみる その5

chakemiです。

しばらく引っ張ってますが、本日もExpressionEncoder SDKに触れてみたいと思います。

前回までで、キャプチャデバイスからリアルタイムにファイルへエンコード出来るようになったので、 今回は、WindowsMediaServiceからLIVE配信が出来るよう、Pull配信に挑戦します。

開発環境

  • WindowsXP SP3
  • VisualC#2010Express
  • ExpressionEncoder4 SDK ※ExpressionEncoderは無償版

前回同様、キャプチャデバイスを使用して、リアルタイムにエンコードするので、LiveJobクラス、LiveDeviceSourceクラスを使用します。 デバイスの取得、プロファイルの部分は前回と同様です。

Pull配信を行なうには、Micosoft.Expression.Encoder.Live名前空間のPullBroadcastPublishFormatクラスを使用します。

1
PullBroadcastPublishFormat pull = new PullBroadcastPublishFormat();

PullBroadcastPublishFormatクラスには、BroadcastPortプロパティとMaximumNumberOfConnectionsプロパティがあります。

BroadcastPortプロパティには、エンコーダに接続するアプリケーションからの接続先ポートを指定します。

1
pull.BroadcastPort = 8080;

MaximumNumberOfConnectionsプロパティでは、エンコーダに接続出来るクライアントの数を指定します。 こちらは、WindowsMediaEncoder SDKと同様で最大50クライアントまでのようです。

1
pull.MaximumNumberOfConnections = 5;

これらを指定して、パブリッシュフォーマットをLiveJobへ適用します。

以下、全体のソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Expression.Encoder;
using System.Drawing;
using Microsoft.Expression.Encoder.Profiles;
using Microsoft.Expression.Encoder.Live;
using Microsoft.Expression.Encoder.Devices;
using System.Collections.ObjectModel;

namespace ConsoleApplication1
{
    class Program
    {


        static void Main(string[] args)
        {
            LiveDeviceSource source;

            LiveJob liveJob = new LiveJob();

            //使用できるデバイスを取得
            Collection<EncoderDevice> videoDevice = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            Collection<EncoderDevice> audioDevice = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            source = liveJob.AddDeviceSource(videoDevice[0], audioDevice[0]);

            liveJob.ActivateSource(source);

            //プロファイルの設定
            WindowsMediaOutputFormat outputFormat = new WindowsMediaOutputFormat();
            outputFormat.VideoProfile = new MainVC1VideoProfile();
            outputFormat.VideoProfile.Bitrate = new ConstantBitrate(512);
            outputFormat.VideoProfile.Size = new Size(320, 240);
            outputFormat.VideoProfile.FrameRate = 30;

            outputFormat.AudioProfile = new WmaAudioProfile();
            outputFormat.AudioProfile.Codec = AudioCodec.Wma;
            outputFormat.AudioProfile.Bitrate = new ConstantBitrate(64);
            outputFormat.AudioProfile.BitsPerSample = 16;

            liveJob.OutputFormat = outputFormat;

            //Pull配信 設定
            PullBroadcastPublishFormat pull = new PullBroadcastPublishFormat();
            pull.BroadcastPort = 8080;
            pull.MaximumNumberOfConnections = 5;

            liveJob.PublishFormats.Add(pull);


            liveJob.StartEncoding();
            Console.WriteLine("Start Encoding");

            Console.Read();
            liveJob.StopEncoding();



        }

    }
}

WindowsMediaPlayerを起動して、「ファイル」の「URLを開く」を選択し、[ http://エンコーダIP:指定ポート ]を入力して、再生が出来れば完成です。

※Windowsファイヤーウォールなどでポートへのアクセスが遮断されている場合は、許可をあたえてください。

Comments