1. 概要
アイ・オー・データなどのネットワークカメラ(TS-WLCAMシリーズ)はM-JPEG over HTTPと言う形式でビデオ映像が配信されています。この形式は音声は含まれず、映像はJPEG形式です。
この形式はHTTP レスポンスヘッダのContent Typeが以下となっています。
送られてくる画像はこのレスポンスで指定される<boundary-name>で区切られて送られてきます。.NET Frameworkはこの形式の画像を標準対応していませんが、CodePlexで公開されているMJPEG Decoder(https://github.com/BrianPeek/mjpeg/)を使用することで使うことが可能です。
この記事ではWPFでの使用例を記載します。
2. MJPEG Decoderをダウンロードする
MJPEG DecoderのサイトからMJPEG Decoderのバイナリをダウンロードします。
![001.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJcc1F6W7ZxgGPkvGsYzgVHd9W8dku8GaIgi05vLMMWFGcOCv-3W7pbgj6Uq8l4i4JQbXcv1stXXoS03ZvpTWq2vjTdwLlW4vUv3Shci6iPh50Z98ZLanwN4P07o3kLpmUG6ZFlT9epvA/s1600/001.jpg)
3. プロジェクトを作成する
WPFアプリケーションを指定して新しいプロジェクトを作成します。
![002.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAVTfGaZmJ_sOHal2XE7PCSc0PDSSXOm7TKOZDgL8lfL1nV4JTNy9pks1W3N98pnWbtbxlyjsnsTPA2Ny2eWhfqc2PCKQgN3FCAXkKiZD-XsfRVgwhuMuqQtACI-rLP72rjYUpavJ4BLU/s1600/002.jpg)
4. 参照に2.でダウンロードしたモジュールを追加します。
(1)ダウンロードしたMJPEG_bin.zipを展開します。
(2)MjpegProcessor.dllを作成したプロジェクトにコピーします。
(3)ソリューションエクスプローラで参照の追加を選択します。
![003.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqjaLYeLqM3E3G4PhpN4VlKvmoqyk_Hr_0Q61JADMiweqWqwk1Q121w3ns9r2nSmviyvbge0QsRrsgpOhCdKevOklr3tqTgapXYkMwh_eHxDXzhnga149RvsRZpwXOVcGdt8R4WoSal0c/s1600/003.jpg)
(4)MjpegProcessor.dllを参照で追加します。
![004.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAICeMpl-No6_7-WdStDjeu2XV0bzoVyTmdPNxKfFyUCIXTllh73RVUltXe_6DP_moYa1ySG6ebpMPEpbj92EIT8XGQBlxfEebyZgEeh_DRBJSbSeS3TKB4IyrwK_zqKAa7IB8HByzLys/s1600/004.jpg)
5. ソースコードに実装します。
(1)XAMLエディタでGUIを作成します。
TestMjpegDecoder.zip
アイ・オー・データなどのネットワークカメラ(TS-WLCAMシリーズ)はM-JPEG over HTTPと言う形式でビデオ映像が配信されています。この形式は音声は含まれず、映像はJPEG形式です。
この形式はHTTP レスポンスヘッダのContent Typeが以下となっています。
multipart/x-mixed-replace;boundary=<boundary-name>
送られてくる画像はこのレスポンスで指定される<boundary-name>で区切られて送られてきます。.NET Frameworkはこの形式の画像を標準対応していませんが、CodePlexで公開されているMJPEG Decoder(https://github.com/BrianPeek/mjpeg/)を使用することで使うことが可能です。
この記事ではWPFでの使用例を記載します。
2. MJPEG Decoderをダウンロードする
MJPEG DecoderのサイトからMJPEG Decoderのバイナリをダウンロードします。
![001.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJcc1F6W7ZxgGPkvGsYzgVHd9W8dku8GaIgi05vLMMWFGcOCv-3W7pbgj6Uq8l4i4JQbXcv1stXXoS03ZvpTWq2vjTdwLlW4vUv3Shci6iPh50Z98ZLanwN4P07o3kLpmUG6ZFlT9epvA/s1600/001.jpg)
3. プロジェクトを作成する
WPFアプリケーションを指定して新しいプロジェクトを作成します。
![002.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAVTfGaZmJ_sOHal2XE7PCSc0PDSSXOm7TKOZDgL8lfL1nV4JTNy9pks1W3N98pnWbtbxlyjsnsTPA2Ny2eWhfqc2PCKQgN3FCAXkKiZD-XsfRVgwhuMuqQtACI-rLP72rjYUpavJ4BLU/s1600/002.jpg)
4. 参照に2.でダウンロードしたモジュールを追加します。
(1)ダウンロードしたMJPEG_bin.zipを展開します。
(2)MjpegProcessor.dllを作成したプロジェクトにコピーします。
(3)ソリューションエクスプローラで参照の追加を選択します。
![003.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqjaLYeLqM3E3G4PhpN4VlKvmoqyk_Hr_0Q61JADMiweqWqwk1Q121w3ns9r2nSmviyvbge0QsRrsgpOhCdKevOklr3tqTgapXYkMwh_eHxDXzhnga149RvsRZpwXOVcGdt8R4WoSal0c/s1600/003.jpg)
(4)MjpegProcessor.dllを参照で追加します。
![004.jpg](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAICeMpl-No6_7-WdStDjeu2XV0bzoVyTmdPNxKfFyUCIXTllh73RVUltXe_6DP_moYa1ySG6ebpMPEpbj92EIT8XGQBlxfEebyZgEeh_DRBJSbSeS3TKB4IyrwK_zqKAa7IB8HByzLys/s1600/004.jpg)
5. ソースコードに実装します。
(1)XAMLエディタでGUIを作成します。
<Window x:Class="TestMjpegDecoder.MainWindow"(2)MjpegProcessorの名前空間を追加します。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestMjpegDecoder" Height="350" Width="525">
<DockPanel>
<DockPanel DockPanel.Dock="Top">
<Button Name="btnStart" Width="48" DockPanel.Dock="Right" Content="開始" Click="btnStart_Click"/>
<Button Name="btnStop" Width="48" DockPanel.Dock="Right" Content="停止" Click="btnStop_Click"/>
<TextBox Name="textUrl" Height="24" DockPanel.Dock="Left"/>
</DockPanel>
<Viewbox>
<Image Name="imgMJPEG"/>
</Viewbox>
</DockPanel>
</Window>
using MjpegProcessor;(3)初期化処理を追加します。
MjpegDecoder m_jpegdecoder;(4)開始のハンドラを追加します。
public MainWindow()
{
InitializeComponent();
//インスタンスを作成する
m_jpegdecoder = new MjpegDecoder();
//フレーム取得ハンドラを設定する
m_jpegdecoder.FrameReady += FrameReady;
}
public void FrameReady(object sender, FrameReadyEventArgs e)
{
//取得した画像をimageに設定する
imgMJPEG.Source = e.BitmapImage;
}
private void btnStart_Click(object sender, RoutedEventArgs e)(5)停止のハンドラを追加します。
{
m_jpegdecoder.ParseStream(new Uri(textUrl.Text));
}
private void btnStop_Click(object sender, RoutedEventArgs e)サンプルコードのダウンロード
{
m_jpegdecoder.StopStream();
}
TestMjpegDecoder.zip
0 件のコメント :
コメントを投稿