मैंने एंड्रॉइड के मीडिया रिकॉर्डर का उपयोग करके एक कस्टम वीडियो कैमरा बनाया है। मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि जब फ़ाइल का आकार 3.80 जीबी तक पहुंच जाता है तो यह रिकॉर्डिंग बंद कर देता है।

  • मुझे पता है कि यह एक फाइल सिस्टम समस्या नहीं है क्योंकि मेरे एसडीकार्ड में एनटीएफएस है (मेरा फोन इसका समर्थन करता है -ऑनर 6X)
  • मेरे पास मेरे एसडी कार्ड पर पर्याप्त जगह है।
  • मैं MediaRecorder.setMaxFileSize() का भी उपयोग नहीं कर रहा हूं।
  • मेरे फोन में इनबिल्ट कैमरा ऐप को वीडियो लेने में कोई समस्या नहीं है जो 3.80 जीबी को पार करता है।

तो वास्तव में यहाँ समस्या क्या है? मुझे कुछ एंड्रॉइड डिवाइसों में पता है, कैमरा ऐप में फ़ाइल सिस्टम के बावजूद एक एम्बेडेड फ़ाइल आकार प्रतिबंध है। लेकिन कस्टम वीडियो रिकॉर्डिंग ऐप को सही बनाते समय यह कोई समस्या नहीं होनी चाहिए?

संपादित करें: समाधान नीचे पोस्ट किया गया।

3
Hari 16 जुलाई 2018, 17:43

2 जवाब

सबसे बढ़िया उत्तर

ठीक है मुझे समाधान मिला, समस्या यह थी कि मैं MediaRecorder.setMaxFileSize() का उपयोग नहीं कर रहा था, इसलिए डिफ़ॉल्ट रूप से सीमा 4GB पर सेट की गई थी। यहां तक ​​कि MediaRecorder.setMaxFileSize(-ve या 0) का उपयोग करते समय, जो स्पष्ट रूप से इसके संदर्भ पृष्ठ के अनुसार फ़ाइल आकार सीमा को अक्षम करता है, फिर भी फ़ाइल आकार सीमा को आंतरिक रूप से 4GB के रूप में सेट करता है (यदि किसी के पास इस पर अधिक जानकारी है, तो कृपया साझा करें)। समाधान यह था कि, मैंने StatFS का उपयोग करके अपने आंतरिक भंडारण में खाली स्थान पाया और सेट किया कि सेटमैक्सफाइलसाइज () के लिए पैरामीटर के रूप में, इसने खूबसूरती से काम किया। मैं अंततः 4GB फ़ाइल सीमा को पार करने में सक्षम था। यह 4GB से अधिक फ़ाइल आकार का समर्थन करने वाले सभी फ़ाइल सिस्टम के लिए कार्य करता है।

4
Hari 19 जुलाई 2018, 13:45

हम .setMaxFileSize सेट कर सकते हैं और फिर < का उपयोग कर सकते हैं a href="https://developer.android.com/reference/android/media/MediaRecorder.html#setOnInfoListener(android.media.MediaRecorder.OnInfoListener)" rel="nofollow noreferrer">.setNextOutputFile() विधि (Android O, API स्तर 26 में जोड़ा गया) .setOnInfoListener() MediaRecorder ऑब्जेक्ट।

नमूना कोड :

MediaRecorder recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
String recordFilePath = "/mnt/sdcard/video_124.mp4";
recorder.setOutputFile(recordFilePath);
recorder.setVideoEncodingBitRate(10_00_000);
recorder.setVideoFrameRate(18);
recorder.setVideoSize(720,1280);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

// imp      
recorder.setMaxFileSize(100000000); // 10000000  = 10 mb | 100000000 = 100 mb
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
            @Override
            public void onInfo(MediaRecorder mr, int what, int extra) {
                Log.i(TAG,String.format(Locale.US,"onInfoListen what : %d | extra %d", what, extra));

            if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING) {
                try {
                    recorder.setNextOutputFile((new RandomAccessFile("/mnt/sdcard/video_125.mp4"),"rw").getFD()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            }
        });

recorder.prepare();
recorder.start();

यहां पूरा gist version उपलब्ध है।

1
Nilesh Deokar 18 अप्रैल 2019, 16:06