これは非常に愚かな質問に違いありませんが、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))
チュートリアルを探しましたが、この簡単な操作を行っていないようです。
どんな助けでも本当にありがたいです!!!