VB.NET – DirectShowで動画再生

ちょっとした動画プレーヤーでも自作してみようと思って調査。
難しそうだなと思いましたが、
DirectShowの.NET用ライブラリが公開されており、これを使うことで超簡単に動画再生できました。

下記サイトから最新版をダウンロード
DirectShowNet library

解凍したフォルダにある「DirectShowLib-2005.dll」を参照の追加する。

例:フォームのパネルに動画を表示再生

Imports DirectShowLib

Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim hr As Integer
    Dim filepath As String

    Dim fg As FilterGraph
    Dim graphBuilder As IGraphBuilder
    Dim mediaControl As IMediaControl
    Dim videoWindow As IVideoWindow

    fg = New FilterGraph
    graphBuilder = DirectCast(fg, IGraphBuilder)
    mediaControl = DirectCast(fg, IMediaControl)
    videoWindow = DirectCast(fg, IVideoWindow)

    filepath = “C:\xxx.mpg”

    hr = graphBuilder.RenderFile(filepath, Nothing)

    ’パネルに表示する
    videoWindow.put_WindowStyle(WindowStyle.Child)
    videoWindow.SetWindowPosition(0, 0, Me.Panel1.Width, Me.Panel1.Height)
    videoWindow.put_Owner(Me.Panel1.Handle)

    ’再生
    mediaControl.Run()

  End Sub
End Class

コマ送りや、早送りなんかも簡単にできるので
オリジナル動画プレーヤーが簡単に作れますね!

メモ:DirectShow リファレンス
MSDN – IGraphBuilder インターフェイス

AccessからPostgreSQLのデータ参照で文字化け

PostgreSQLのテーブルデータをMicrosoft Office Accessで見たかったので
調べていたらPostgreSQLのODBCドライバが必要とのこと。
ググって見ると、
PostgreSQL ODBC Driver 日本語版 というのがヒットしたので、
サイトからダウンロードし、ODBCドライバをインストール。

AccessでインストールしたODBCドライバを使用し、テーブルをリンク。
しかし、テーブルのデータを見てみると文字化けしている・・・orz

そこで再度ググって調査。
ODBCドライバのバージョンが古かったようだ。

使っているPostgreSQLのバージョンは8.4だが、
PostgreSQL ODBC Driver 日本語版のバージョンは7.1だった。

ODBCドライバは、公式サイトからODBCインストーラがダウンロードできるのがわかったので、
早速バージョンが一致するODBCインストーラ「psqlodbc_08_04_0200.zip」をダウンロードしてインストール。

公式サイトのODBCインストーラ
http://www.postgresql.org/ftp/odbc/versions/msi/

再度、Accessでデータテーブルのリンクを行う。
ドライバの選択肢に、
・PostgreSQL ANSI
・PostgreSQL Unicode
の二つが追加されていた。
使用しているデータベースはUTF-8なのでPostgreSQL Unicodeを選択。

テーブルデータには文字化けしてない日本語がバッチリ表示されました。

一件落着!

VB.NET – TrackBarでクリックした位置に移動

Trackbarでシークバーのようにクリックした位置に移動させたいと思っていたんだけど、
Trackbarにはそういったプロパティやイベントがみあたらない・・・

「LargeChange」プロパティというのがあって、
マウスのクリックや、PAGE UP および PAGE DOWN キーを押したときにスライダが移動するポジション数を指定できるのだが、0にしたら移動するかも!?なんて期待を持ちながら設定してみたけどスライダがまったく動かず・・・当たり前か><
クリックした場所に必ず目盛りがあるわけではないし、Trackbar標準機能ではできないのかなぁ。

仕方なく、無理やり実装してみた。
方法は、LargeChangeを0にしてマウスイベントを制御してスライダの位置を設定。
PAGE UPやPAGE DOWNキーで移動しなくなるけどこれらのキーを使う人はほとんどいないでしょう!?ということで。

Private scrollflg As Boolean

Private Sub TrackBar1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseDown
  scrollflg = False
End Sub

Private Sub TrackBar1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseUp
  Dim seekWidth As Double
  Dim seekValue As Integer
  Dim ticWidth As Double

  ‘左クリック以外は移動しない
  If e.Button <> Windows.Forms.MouseButtons.Left Then
    Exit Sub
  End If

  ‘スクロール移動した場合は移動しない
  If scrollflg = True Then
    Exit Sub
  End If

  ‘TrackBar範囲以外の場合は移動しない
  If e.X < 0 OrElse e.X > TrackBar1.Width OrElse e.Y < 0 OrElse e.Y > TrackBar1.Height Then
    Exit Sub
  End If

  If e.X < 8 Then
    TrackBar1.Value = TrackBar1.Minimum
  ElseIf e.X > TrackBar1.Width – 8 Then
    TrackBar1.Value = TrackBar1.Maximum
  Else
    seekWidth = TrackBar1.Width – 16
    ticWidth = seekWidth / (TrackBar1.Maximum – TrackBar1.Minimum)
    seekValue = CInt((e.X – 8) / ticWidth) + TrackBar1.Minimum
    TrackBar1.Value = seekValue
  End If

End Sub

Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
  scrollflg = True
End Sub

8を引いたりしてるのはTrackBarコントロールの端から8pxのところに目盛り位置があるから(両端合わせて16)
一応それっぽい動きはしているけど、もっと良い方法があったらご教授願いますm(..)m

VB.NET – WebBrowserからJavascriptのfunctionを実行

.NETには、WEBページを表示することができるWebBrowserコントロールがあります。
このWebBrowserコントロールに表示したWebページに含まれるJavascriptの関数を呼び出す方法を紹介します。

Private Sub ExecJacascript()
   ‘引数がある場合は設定
  Dim args(0) As Object
  args(0) = “こんにちわ”

   ‘jacascriptの関数名を指定して呼び出し
  Me.WebBrowser1.Document.InvokeScript(“helloword”, args)

End Sub

.m2ts(.mts)ファイルからGPS(緯度経度)情報取得

GPS情報を取得している動画からGPS情報を取得する方法。

.m2ts(.mts)ファイルはAVCHDの規格で記録されている。
AVCHDでは、映像には高効率符号化が可能なH.264/MPEG-4 AVC方式を採用、音声にはドルビーデジタル (AC-3) 方式(LPCM:オプション)を採用、多重化にMPEG2-TSを採用。

GPSの情報は動画部分に埋め込まれており、H.264のtagを解析することで取得可能。

TAGの情報は以下のサイトを参考

H264 Tags

MDPMタグ(16進で 4D 44 50 4D)を検索して、そこから順番に、日時(DateTimeOriginal)や緯度(GPSLatitude)経度(GPSLongitude)などを取得可能。

 
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera