Xuggle Codec Identification

I am trying to run the following Xuggle code:

public static boolean convert(String stream) throws IOException, InterruptedException {

  IMediaReader reader = ToolFactory.makeReader(stream + ".flv");

  IMediaWriter writer = ToolFactory.makeWriter(stream + ".mp3", reader);
  reader.addListener(writer);

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

  return true;
}

Where stream is the path to the file. But I get the following exception:

java.lang.IllegalArgumentException: could not find input codec id
 at com.xuggle.xuggler.IContainerFormat.establishOutputCodecId(IContainerFormat.java:393)
 at com.xuggle.xuggler.IContainerFormat.establishOutputCodecId(IContainerFormat.java:327)
 at com.xuggle.xuggler.IContainerFormat.establishOutputCodecId(IContainerFormat.java:300)
 at com.xuggle.mediatool.MediaWriter.addStreamFromContainer(MediaWriter.java:1141)
 at com.xuggle.mediatool.MediaWriter.getStream(MediaWriter.java:1046)
 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)
 at <package_name>MediaFile.convert(MediaFile.java:66)
 at <package_name>.MediaFileTest.shouldConvertExistingFLV(MediaFileTest.java:32)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
 at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
 at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
 at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
 at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

unit test:

 @Test
 public void shouldConvertExistingFLV() throws IOException, InterruptedException {
  String str = "C:\\Program Files\\Wowza Media Systems\\Wowza Media Server 2\\content\\Extremists";
  boolean result = MediaFile.convert(str);
  assertTrue(result);
 }

So why can't he find the codec since I am testing a simple conversion of FLV to mp3?

+3
source share
3 answers

If your source is a true flv stream (no odd codec information) then this should work. I can only think of two problems that may arise here:

  • , , . , .
  • - mp3. -, .

,

0

The trick is creating when adding an audio stream to Writer. This piece of code works for me when extracting an audio stream from FLV and transcoding it to mp3.

     IMediaReader reader = ToolFactory.makeReader(filename + ".flv");
     IMediaWriter writer = ToolFactory.makeWriter(filename + ".mp3", reader);
     int sampleRate = 22050;
     int channels = 1;
     writer.addAudioStream(0, 0, ICodec.ID.CODEC_ID_MP3, channels, sampleRate);

     reader.addListener(writer);
     while (reader.readPacket() == null)
               ;
0
source

Source: https://habr.com/ru/post/1743876/


All Articles