2011-08-19 18 views
9

से वीडियो चलाने के लिए MediaElement का उपयोग करना क्या System.IO.Stream ऑब्जेक्ट से स्ट्रीमिंग वीडियो चलाने के लिए WPF MediaElement का उपयोग करना संभव है? स्ट्रीम ऑब्जेक्ट को डब्ल्यूसीएफ सेवा से पुनर्प्राप्त किया जा रहा है जो मीडिया फ़ाइलों को संग्रहीत करता है।स्ट्रीम

उत्तर

6

यदि आप डब्ल्यूसीएफ को http-URL (GET) के माध्यम से मीडिया ऑब्जेक्ट वितरित कर सकते हैं तो आप उस URL को MediaElement.Source संपत्ति पर असाइन कर सकते हैं - http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.source.aspx देखें।

मामलों में जहां इस तरह के यूआरएल संभव उपलब्ध/नहीं है के लिए:

एक स्ट्रीम नियत समय संभव नहीं है - हालांकि वहां ऐसा, एक डायरेक्टशो आधारित उदाहरण के लिए 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 देख बनाने के लिए कुछ हैक्स कर रहे हैं।

एक अन्य विकल्प किसी भी तरह Silverlight MediaElement होस्ट करते हैं और SetSource विधि है जो एक धारा लेते हैं और इसे खेल सकते हैं ... देख http://silverlightviewport.codeplex.com/SourceControl/list/changesets और http://msdn.microsoft.com/en-us/library/cc190669%28v=vs.95%29.aspx

4

मैं जानता हूँ कि यह नहीं कि आप क्या पूछा है, लेकिन आप कर सकते हैं का उपयोग किया जाएगा WPF में एक विंडो के अंदर एक वीएलसी ActiveX घटक होस्ट करें और फिर स्ट्रीम से कनेक्ट करने और स्ट्रीम प्रदर्शित करने के लिए उस वीएलसी नियंत्रण का उपयोग करें। इस तरह मैं डब्ल्यूपीएफ के माध्यम से काम कर रहा स्ट्रीमिंग मिला।

संपादित करें: this page has an example of how to host an ActiveX control inside WPF

+2

क्या मैं एक WPF अनुप्रयोग का एक उदाहरण VLC को ActiveX घटक के रूप में चला सकता हूं? मैं देखना चाहता हूं कि यह कैसा दिखता है और वास्तव में इसके लिए जाने से पहले इसे चलाने में क्या शामिल है। – rafale

+0

हाय स्टुअर्ट, क्या आप कहीं भी वीएलसी का उपयोग करके अपना उदाहरण पोस्ट कर सकते हैं ताकि मैं एक नज़र देख सकूं। धन्यवाद। –

12

इससे पहले कि किसी को भी खुद के लिए यह जानने घंटे बरबाद करती है: यह एक WPF आवेदन में सिल्वरलाइट MediaElement की मेजबानी के लिए असंभव है। इसका कारण यह है कि यह प्रस्तुति Framework.dll (WPF के लिए अपरिहार्य) और System.Windows.dll (सिल्वरलाइट संस्करण) में दिखाई देने वाले कई प्रकारों में से एक है जिसमें समान नाम और समान नामस्थान हैं, लेकिन विभिन्न प्रकार हैं। (किसी को यह समझाया जाना चाहिए कि हमारे पास माइक्रोसॉफ्ट के नामस्थान क्यों हैं!)

+1

यह सच है। दुर्भाग्य से मुझे इसे कठिन तरीके से ढूंढना पड़ा। :( – rafale

+4

मुझे पता है कि यह एक साल का उत्तर है, लेकिन "समान नामस्थान में एक ही नाम के साथ कई अलग-अलग प्रकार नहीं हैं" संदर्भ उपनाम मौजूद हैं? –

+1

सिल्वरलाइट वेबसाइट बनाना और MediaElement का उपयोग करना हमेशा संभव है और डब्ल्यूपीएफ एप्लिकेशन में उस सिल्वरलाइट वेबसाइट पर स्रोत के साथ वेबब्रोसर नियंत्रण जोड़ें और यह किया जाता है। –

12

यह बहुत देर हो सकती है, उम्मीद है कि अगर आप अभी भी उत्तर ढूंढ रहे हैं तो इससे मदद मिल सकती है।

हाँ आप WPF मीडिया तत्व का उपयोग कर मेमोरी स्ट्रीम से वीडियो चला सकते हैं।

मैं बॉक्स्ड एप्लिकेशन कहा जाता है एक तीसरी पार्टी घटक, BoxedApp को एक लाख धन्यवाद का इस्तेमाल किया है - http://www.boxedapp.com/boxedappsdk/

मैं इसे बाइट [] के लिए काम करने के लिए कोड एक छोटा सा अपडेट करना होगा। 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(); 
    } 
} 

- बॉक्स्ड अनुप्रयोग के लिए नमूने का पालन करें और है कि कृपया यह .. आप एक खुश दुनिया में हैं ...

यह क्यूटी प्लेयर के लिए भी वही बात है।

प्रतिक्रिया के आधार पर यदि मैं प्रदान की गई जानकारी पर्याप्त नहीं है तो मैं एक पूर्ण उदाहरण जोड़ूंगा।

मुबारक कोडिंग ....

+0

ग्रेट उत्तर, बहुत बहुत धन्यवाद! – Mafii

0

WPF MediaElement के रूप में आंतरिक रूप से खिड़कियों का उपयोग करता है मीडिया प्लेयर। यदि आप डिफ़ॉल्ट बफर सेटिंग से कस्टम पर मीडिया प्लेयर की बफर सेटिंग्स को बदलते हैं। विंडोज मीडिया प्लेयर खोलें  टूल्स  विकल्प  प्रदर्शन।

जब आप "बफर" विकल्प चुनते हैं और "सामग्री के सेकेंड" को 2 पर सेट करते हैं। निम्न रजिस्ट्री मान मीडिया प्लेयर के अंतर्गत जोड़े जाएंगे। HKEY_CURRENT_USER \ Software \ Microsoft \ MediaPlayer \ पसंद UseDefaultBufferTime = 0 CustomBufferTime = 2000

आप परिवर्तन करने के लिए डॉटनैट रजिस्ट्री वर्ग का उपयोग कर सकते हैं। इस लिंक का संदर्भ लें: 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

संबंधित मुद्दे