ऐसा लगता है कि समस्या यह है कि डायरेक्टशो लाइब्रेरी का उपयोग करने के लिए समस्या इतनी अधिक नहीं है (the `DirectShow.Net Forum विशेष रूप से इसके लिए डिज़ाइन की गई है), बल्कि एम्बेडेड संसाधन का उपयोग कैसे करें।
मैं कुछ साल पहले अनुबंध अनुबंध पर कुछ ऐसा चला गया जहां एक नियोक्ता चिंतित था कि कुछ ग्राहक अपनी मालिकाना जानकारी चुरा सकते हैं। मेरी जानकारी सैकड़ों पीडीएफ दस्तावेज़ों में थी, लेकिन विचार वीडियो फ़ाइलों के लिए समान काम करता है।
पहले, संसाधनों की अपनी सूची में वीडियो फ़ाइल जगह:: मैं Visual Studio
उपयोग करते हैं, तो मैं Project
के गुण के लिए जाना, संसाधन टैब क्लिक करें, चयन
यहाँ कैसे मैं इस समस्या घेरने की कोशिश की है फ़ाइलें विकल्प चुनें, फिर Add Resource
>Add Existing File...
कोड फ़ाइल आप का उपयोग किया जाएगा करने के लिए निम्न दो namespaces
जोड़ें:
using System.IO;
using System.Diagnostics;
- अंत में, जहाँ आप अपने वीडियो फ़ाइल खेलना चाहते हैं, बस निम्न जैसा कुछ कार्य करें:
Process player = null;
string tempFile = "~clip000.dat";
try {
File.WriteAllBytes(tempFile, Properties.Resources.MyMovie_AVI);
player = Process.Start(tempFile);
player.WaitForExit();
} finally {
File.Delete(tempFile);
}
सबसे अधिक संभावना, तो आप करेंगे Process.Start
विधि को कॉल कर रहे हैं, बल्कि ऐप ropriate DirectShow
विधि। विचार अभी भी वही है: byte
सरणी के रूप में अपने संसाधनों को निकालें, उन्हें एक नए, अस्थायी फ़ाइल पर लिखें, फ़ाइल का उपयोग करें, फिर जब भी आप पूरा कर लें तो उस फ़ाइल को हटा दें।
finally
ब्लॉक में Delete
बयान डाल करने के लिए इतना है कि यदि कोई त्रुटियां होती हैं या जब फ़ाइल अभी भी खेल रहा है अपने उपयोगकर्ता कार्यक्रम बंद कर देता है, आपके आवेदन अभी भी पुरानी फाइल साफ सुनिश्चित करें।
संपादित करें:
मैं इस ऐसा करने का एक व्यावहारिक तरीका हो सकता है लगता है:
using (MemoryStream ms = new MemoryStream(Properties.Resources.MyMovie_AVI)) {
// Now you have to find a way in `DirectShow` to use a Stream
}
संसाधन आसानी से नेट असेंबली से निकाले जा सकते हैं। आप डेटा एन्क्रिप्ट कर सकते हैं, लेकिन कुंजी को आपके कोड में होना चाहिए, और फिर स्रोत को आसानी से आपके .NET असेंबली से निकाला जा सकता है। – habakuk
मैं SmartAssembly जैसे संरक्षक का उपयोग करने जा रहा हूं। –