掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
[DirectShow]IMediaPosition::get_Duration()が失敗してしまいます。 (ID:71779)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
対象のタイムフォーマットが TIME_FORMAT_NONE(Seeking is not supported)になってるとかない? IMediaSeeking::GetTimeFormat() でフォーマット取得して確認してみては。 > 同じエンコードをしている他のファイルでは問題なく取得できるのですが、 > 1秒以下のファイルにて失敗している状況です。 デフォルトではタイムフォーマットは TIME_FORMAT_MEDIA_TIME に設定される仕様となっている。 だが、1秒以下の動画はseekを実装するのが難しい(1秒以下をseekしようとするとかなり細かい単位で 正確にseekする必要がある等で)ので、今、かわせみおはらさんの環境で利用している MPEG1展開用DirectShowフィルタでは TIME_FORMAT_NONE を設定しseek関係の処理を無効にしている、 等あるかもしれない。 ↑は、ソースなんて無い俺の完全な想像に過ぎないのであくまで”かもしれない”の話だが。 > Q1.上記1&2以外の方法で動画の長さを取得することは可能でしょうか? 仮に現在のタイムフォーマットが TIME_FORMAT_NONE だったとして、そのフィルタで他のタイムフォーマットを 指定可能(IMediaSeeking::IsFormatSupported)なら、IMediaSeeking::SetTimeFormat() でタイムフォーマットを 変更した後に GetDuration() してやればどうなるだろうか? > Q2.単純にコーデックなどの違いによる挙動の違いなのでしょうか? > Q3.そもそも1秒未満の動画を正常に扱うことができないのでしょうか? 今回利用しているのとは別のMPEG1展開用フィルタでは、1秒未満の動画でもseek可能かもしれない。 対応タイムフォーマットが TIME_FORMAT_NONE のみという独自DirectShowフィルタなんてものも作れるのだから、 利用するDirectShowフィルタ次第な気もするなぁ。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.