RTPサーバーの実装にjavax.mediaを使用したコードを見てきました。
class MediaConvertion {
private MediaLocator mediaLocator = null;
private DataSink dataSink = null;
private Processor mediaProcessor = null;
private static final Format[] FORMATS = new Format[] { new AudioFormat(
AudioFormat.DVI_RTP) };
private static final ContentDescriptor CONTENT_DESCRIPTOR = new ContentDescriptor(
ContentDescriptor.RAW_RTP);
public MediaConvertion(String url) throws IOException,
NoProcessorException, CannotRealizeException, NoDataSinkException,
NoDataSinkException {
mediaLocator = new MediaLocator(url);
}
public void setDataSource(DataSource ds) throws IOException,
NoProcessorException, CannotRealizeException, NoDataSinkException {
mediaProcessor = Manager.createRealizedProcessor(new ProcessorModel(ds,
FORMATS, CONTENT_DESCRIPTOR));
dataSink = Manager.createDataSink(mediaProcessor.getDataOutput(),
mediaLocator);
}
public void startTransmitting() throws IOException {
mediaProcessor.start();
dataSink.open();
dataSink.start();
}
public void stopTransmitting() throws IOException {
dataSink.stop();
dataSink.close();
mediaProcessor.stop();
mediaProcessor.close();
}
}
public class MediaConverterExample extends Frame implements ActionListener {
Button st_stream;
static MediaConvertion mdcon;
public static void main(String args[]) throws IOException,
NoProcessorException, CannotRealizeException, NoDataSinkException,
MalformedURLException, NoDataSourceException {
Format input1 = new AudioFormat(AudioFormat.MPEGLAYER3);
Format input2 = new AudioFormat(AudioFormat.MPEG);
Format output = new AudioFormat(AudioFormat.LINEAR);
PlugInManager.addPlugIn("com.sun.media.codec.audio.mp3.JavaDecoder",
new Format[] { input1, input2 }, new Format[] { output },
PlugInManager.CODEC);
File mediaFile = new File(args[1]);
DataSource source = Manager.createDataSource(new MediaLocator(mediaFile
.toURL()));
mdcon = new MediaConvertion(args[0]);
mdcon.setDataSource(source);
new MediaConverterExample();
}
public MediaConverterExample() {
st_stream = new Button("Start Streaming");
add(st_stream);
st_stream.addActionListener(this);
setVisible(true);
setSize(200, 300);
}
public void actionPerformed(ActionEvent ae) {
try {
mdcon.startTransmitting();
} catch (Exception e) {
}
}
}
@streakあなたのリンクは壊れています –
申し訳ありませんドメインが移動されています。 – streak
私はそれが入力フォーマットに依存すると信じています。例えばMP3ファイル用にRTPペイロードを設定する方法については、https://tools.ietf.org/html/rfc5219を参照してください。他のRFCの他の形式を文書化しています。いずれの場合でも、入力形式は非常に重要です。たとえば、2つのパケット間でMP3フレームを分割したくない場合などです。 – colti