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

chakemiです。新年早々から出社していたので、年越した感じがしません。。。

本日も引き続き、ExpressionEncoder SDKに触れてみたいと思います。 今回は、USBなどのキャプチャデバイスからエンコードを行なってみたいと思います。

開発環境

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

USBカメラなどのソースを使用するには、今までのJobクラスではなく、LiveJobクラス、LiveDeviceSourceクラスを使用します。

Micosoft.Expression.Encoder.Live と Microsoft.Expression.Encoder.Devices 名前空間にありますので、usingステートメントを追加します。 まずは、PCに接続されたデバイスのリストを取得します。

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

簡単に試すため、取得したデバイスリストから一つ目に見つかったものを使ってみます。

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

OutputFormatはMediaItemを使用しないで、LiveJobのプロパティへ設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
//プロファイルの設定
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;

ファイルへの出力設定をおこない、LiveJobへ適用します。

1
2
3
4
FileArchivePublishFormat archive = new FileArchivePublishFormat();
archive.OutputFileName = @"C:\videoOutput\test.wmv";

liveJob.PublishFormats.Add(archive);

以下、全体のソース

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

            FileArchivePublishFormat archive = new FileArchivePublishFormat() { OutputFileName = @"C:\videoOutput\test.wmv" };

            liveJob.PublishFormats.Add(archive);

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

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

        }
    }
}

アプリケーション実行後、エンコードを開始し、Enterキーが押されたら終了です。 こんな感じでエンコード出来ました。

Comments