Это, должно быть, очень глупый вопрос, но как перекодировать с помощью Xuggler?Упрощенно у меня есть:
IMediaReader reader = ToolFactory.makeReader(sourceUrl);
IMediaWriter writer = ToolFactory.makeWriter(url, reader);
MediaSegmenterWriter writerListener = new MediaSegmenterWriter();
writer.open();
while (reader.readPacket() == null)
do {
}
while(false);
Теперь я хочу перекодировать файл в ридере с другим битрейтом и разрешением.Как я могу это сделать?При создании писателя я попытался добавить IMediaStreams с копией исходного кодера с необходимыми изменениями, но это не работает:
int numStreams = reader.getContainer().getNumStreams();
for(int i = 0; i < numStreams; i++)
{
final IStream stream = reader.getContainer().getStream(i);
final IStreamCoder coder = stream.getStreamCoder();
IStreamCoder newCoder = IStreamCoder.make(IStreamCoder.Direction.ENCODING, coder);
if(newCoder == null ){
continue;
}
writer.getContainer().addNewStream(i);
int streams = writer.getContainer().getNumStreams();
System.out.println("Current amount of streams in writer: " + streams);
System.out.println("Coder: " + coder.toString());
if (coderSetting != null && newCoder != null){
if (newCoder.getCodecType().equals(ICodec.Type.CODEC_TYPE_VIDEO)) {
newCoder.setWidth(320);
newCoder.setHeight(240);
}
IStream outputStream = writer.getContainer().getStream(i);
outputStream.setStreamCoder(newCoder);
newCoder.open();
}
}
Но это просто дает тот же результат, что и пропуск кода (например, 1920x1080 от оригинала)
Также пытался добавить слушателя к записывающему устройству и заменить кодер, но либо получил ошибку (кодер уже открыт_ или эффекта нет. (onOpen, onAddStream, onOpenCoder))
Я искал учебные пособия, но, похоже, эта простая операция не выполняется.
Любая помощь будет ДЕЙСТВИТЕЛЬНО оценена !!!