मैं वर्तमान में .NET से libavutil, libavformat और libavcodec (FFMpeg का सभी भाग) तक पहुंचने के लिए देख रहा हूं।क्या .NET में FFMpeg, libavutil, libavformat और libavcodec के लिए काम करने वाले पी/Invoke घोषणाओं का एक सेट है?
वर्तमान में, मैं libraries from the automated builds of the shared FFMpeg package प्रदर्शन विंडोज 32-बिट के लिए हर रात हो रही है।
मैं भी ffmpeg-sharp project से कोड का उपयोग कर रहा हूँ। उस प्रोजेक्ट में, मैंने कई वर्गों को हटा दिया है जो संकलित नहीं कर रहे थे (वे रैपर वर्ग हैं जो पी/आमंत्रण घोषणा नहीं करते हैं)।
कोड ठीक संकलित करता है, लेकिन मैं कुछ मुद्दों में भाग रहा हूं।
सबसे पहले, यह है कि ए वी * .dll के निर्माण cdecl calling convention का उपयोग करता है, जैसा कि मैंने PInvokeStackImbalanceException
के एक नंबर प्राप्त था जब av_open_input_file
कॉल करने के लिए कोशिश कर रहा प्रतीत होता है। यह सही काम करने के लिए इसे बदलने के लिए काफी आसान था। AVFormatContext
संरचना आबादी है।
उसके बाद, मैं av_find_stream_info
कॉल करने के लिए फ़ाइल में धाराओं के बारे में जानकारी प्राप्त करना चाहते हैं। हालांकि, जब AVFormatContext
को कॉल से av_open_input_file
पर पुनर्प्राप्त किया गया, तो AccessViolationException
इंगित किया गया है कि मैं संरक्षित स्मृति से पढ़ने या लिखने की कोशिश कर रहा हूं।
किसी को भी पी/आह्वान के माध्यम से libavutil, libavformat और libavcodec dll पुस्तकालयों का उपयोग करने के पी/आह्वान इस्तेमाल किया गया है और यह काम करने के लिए मिल गया है?
मैं उल्लेख करना चाहिए कि, ffmpeg के कमांड लाइन संस्करण के साथ काम करते हुए एक समाधान, इस मामले में एक व्यवहार्य समाधान नहीं है, का उपयोग पुस्तकालयों के माध्यम से हो की जरूरत है। इसका कारण यह है कि मुझे ऐसा करने के लिए डिस्क मार्ग को बहुत अधिक करना होगा जो मुझे करना है (मुझे कुछ बहुत ही उच्च परिभाषा वीडियो के फ्रेम-दर-फ्रेम विश्लेषण करना है) और मैं डिस्क से बचना चाहता हूं जितना संभव।
पुन: डिस्क ताड़ना चिंताओं, मैं सिर्फ ffmpeg उत्पादन पर कब्जा करने के साथ कुछ सफलता प्राप्त की - हाँ सामग्री, नहीं मेटाडाटा - stdout पाइप के माध्यम से। यदि यह आपके परिदृश्य में फिट हो सकता है, तो कोई फ़ाइल नहीं है और यह डिस्क को हिट नहीं करती है। –