سؤال

لقد بدأت مؤخرًا العمل مع COUPGER لتحويل ملفات الفيديو ذات التنسيقات المختلفة إلى FLVs المقابلة (ليتم تشغيلها على موقعنا عبر JWPlayer). الكود الذي أستخدمه بسيطًا ؛ في الأساس ما يعرضونه للبرنامج التعليمي لتحويل الفيديو الأساسي:

IMediaReader reader = ToolFactory.makeReader(file.getPath());
reader.addListener(ToolFactory.makeWriter(tempFileName, reader));

while (reader.readPacket() == null)
;

هذا يعمل بشكل جيد لحوالي 50 ٪ من مقاطع الفيديو التي حاولت. ومع ذلك ، أحصل على الخطأ التالي لبعض مقاطع الفيديو (جميع. mp4s التي صادفتها ، وكذلك بعض .movs)

Caused by: java.lang.RuntimeException: Error Operation not permitted, failed to write header to container com.xuggle.xuggler.IContainer@-635072136[url:/tmp/1280786368521.flv;type:WRITE;format:com.xuggle.xuggler.IContainerFormat@-631842520[oname:flv;olongname:FLV format;omimetype:video/x-flv;oextensions:flv;];] while establishing stream com.xuggle.xuggler.IStream@-615272544[index:1;id:2;streamcoder:com.xuggle.xuggler.IStreamCoder@-677475184[codec=com.xuggle.xuggler.ICodec@-635131032[type=CODEC_TYPE_AUDIO;id=CODEC_ID_MP3;name=libmp3lame;];time base=1/48000;frame rate=0/0;sample rate=48000;channels=2;];framerate:0/0;timebase:1/90000;direction:OUTBOUND;]
        at com.xuggle.mediatool.MediaWriter.getStream(MediaWriter.java:1065)
        at com.xuggle.mediatool.MediaWriter.encodeAudio(MediaWriter.java:837)
        at com.xuggle.mediatool.MediaWriter.onAudioSamples(MediaWriter.java:1448)
        at com.xuggle.mediatool.AMediaToolMixin.onAudioSamples(AMediaToolMixin.java:89)
        at com.xuggle.mediatool.MediaReader.dispatchAudioSamples(MediaReader.java:628)
        at com.xuggle.mediatool.MediaReader.decodeAudio(MediaReader.java:555)
        at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:469)
        ... 10 more

أواجه صعوبة في تحديد ما إذا كان السبب الجذري للخطأ مرتبطًا بـ XGUGUPE/FFMPEG/LAME/etc. التثبيت ، أو ما إذا كانت هناك مشكلة في الكود الخاص بي.

أعتقد أن الخطوة الأولى هي فك تشفير سجل الأخطاء واستخدام تلك المعلومات لمحاولة تحويل الفيديو باستخدام مكالمات FFMPEG الأصلية. إذا نجح ذلك ، أفترض أنه من المعقول الاعتقاد بأن هذه المكونات مثبتة بشكل صحيح؟

لذلك للحصول على رسالة سجل مثل:

Error Operation not permitted, failed to write header to container com.xuggle.xuggler.IContainer@-635072136
[url:/tmp/1280786368521.flv;type:WRITE;format:com.xuggle.xuggler.IContainerFormat@-631842520[oname:flv;olongname:FLV format;omimetype:video/x-flv;oextensions:flv;];] 

while establishing stream com.xuggle.xuggler.IStream@-615272544
[index:1;id:2;streamcoder:com.xuggle.xuggler.IStreamCoder@-677475184[codec=com.xuggle.xuggler.ICodec@-635131032[type=CODEC_TYPE_AUDIO;id=CODEC_ID_MP3;name=libmp3lame;];time base=1/48000;frame rate=0/0;sample rate=48000;channels=2;];framerate:0/0;timebase:1/90000;direction:OUTBOUND;]

كيف يمكنني ترجمة ذلك إلى أمر FFMPEG؟

أي نصائح أخرى لتصحيح الأخطاء لهذا المبتدئ المبتدئ؟

هل كانت مفيدة؟

المحلول

تم حل المشكلة. كان بسبب FLV يدعم فقط تدفقات الصوت بمعدلات عينة من 44.1 و 22.05 و 11.025 كيلو هرتز. استخدمت فئة IaudioresAmpler من Xgugle من داخل مستمع مخصص Mediatool يستمع إلى onaudiosamples () لإعادة تشكيل الصوت إلى معدل مدعوم.

نصائح أخرى

كما واجهت مؤخرًا هذه القضية نفسها. أمضيت يومين في هذا حتى وجدت الجواب هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top