WPF MediaElementを使用してSystem.IO.Streamオブジェクトからストリーミングビデオを再生することは可能ですか? Streamオブジェクトは、メディアファイルを格納するWCFサービスから取得されています。
WCFにhttp-URL (GET)
を介してメディアオブジェクトを配信させることができる場合は、そのURLをMediaElement.Source
プロパティに割り当てることができます- http:// msdnを参照してください.Microsoft.com/en-us/library/system.windows.controls.mediaelement.source.aspx 。
そのようなURLが利用できない/可能性がない場合:
ストリームを割り当てることは現在不可能です-それを実現するためのいくつかのハックがありますが、DirectShowベースの例については http://social.msdn.Microsoft.com/forums/en-を参照してくださいUS/wpf/thread/6191ef1a-0010-4294-a5b4-451bbadca33a / および http://jmorrill.hjtcentral.com/Home/tabid/428 /EntryId/15/WPF-Hackery-Part-I.aspx 。
もう1つのオプションは、何らかの方法でSilverlight MediaElement
をホストし、ストリームを取得して再生できるSetSource
メソッドを使用することです... http:// silverlightviewportを参照してください。 codeplex.com/SourceControl/list/changesets および http://msdn.Microsoft.com/en-us/library/cc190669%28v=vs。 95%29.aspx
手遅れかもしれませんが、まだ答えを探しているなら、これが役立つかもしれません。
はい、WPFメディア要素を使用してメモリストリームからビデオを再生できます。
ボックス化されたアプリと呼ばれるサードパーティのコンポーネントを使用しましたBoxedAppのおかげで100万 http://www.boxedapp.com/boxedappsdk/
Byte []で機能するように、コードを少し更新する必要があります。以下のコンストラクターをBoxedAppからCustomFileStreamクラスにコピーします
public CustomFileStream(byte[] data)
{
_Stream = new MemoryStream(data);
_Length = _Stream.Length;
_data = data;
_Offset = 0;
}
Wpfアプリケーションを作成し、メディア要素とボタンを追加して、以下のコードをコピーします
public MainWindow()
{
BoxedAppSDK.NativeMethods.BoxedAppSDK_Init();
InitializeComponent();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
var MyFileStream = new CustomFileStream(File.ReadAllBytes(@"wildlife.wmv"));
IntPtr ptr = BoxedAppSDK.NativeMethods.BoxedAppSDK_CreateVirtualFileBasedOnIStream(
@"1.wmv",
BoxedAppSDK.NativeMethods.EFileAccess.GenericWrite,
BoxedAppSDK.NativeMethods.EFileShare.Read,
IntPtr.Zero,
BoxedAppSDK.NativeMethods.ECreationDisposition.New,
BoxedAppSDK.NativeMethods.EFileAttributes.Normal,
IntPtr.Zero,
MyFileStream);
using (new SafeFileHandle(ptr, true))
{
mediaElement1.Source = new Uri(Path.GetFullPath("1.wmv"));
mediaElement1.LoadedBehavior = MediaState.Manual;
mediaElement1.Play();
}
}
-箱入りアプリの場合は、サンプルに従ってください。それだけです。あなたは幸せな世界にいます...
QTPlayerでも同じです。
回答に基づいて、提供された情報が十分でない場合は、完全な例を追加します。
ハッピーコーディング....
誰かが自分でこれを見つけるのに時間を浪費する前に:WPFアプリケーションでSilverlightMediaElementをホストすることは不可能です。これは、PresentationFramework.dll(WPFでは不可避)およびSystem.Windows.dll(Silverlightバージョン)に表示される、同じ名前と同じ名前空間を持つが、タイプが異なる多数のタイプの1つであるためです。 (Microsoftに名前空間がある理由を誰かが説明する必要があります!)
これはあなたが求めていたものではないことはわかっていますが、WPFのウィンドウ内でVLC ActiveXコンポーネントをホストし、そのVLCコントロールを使用してストリームに接続してストリームを表示できます。これが、WPFを介してストリーミングを機能させる方法です。
WPFmediaelementは内部的にWindowsMediaPlayerを使用するため。メディアプレーヤーのバッファ設定をデフォルトのバッファ設定からカスタムに変更した場合。 WindowsMediaPlayerツールオプションパフォーマンスを開きます。
「バッファ」オプションを選択し、「コンテンツの秒数」を2に設定すると、次のレジストリ値がメディアプレーヤーの下に追加されます。 HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Preferences UseDefaultBufferTime = 0 CustomBufferTime = 2000
Dotnetレジストリクラスを使用して変更を加えることができます。このリンクを参照してください: https://social.msdn.Microsoft.com/Forums/vstudio/en-US/1b4b8fb9-ff8f-4861-8e99-4a7a4fc75596/setting-windows-media-player-properties-in- wpf?forum = wpf#ac879a7f-37bc-4ccc-854d-ab6e047086e5