반응형

JMF에서 지원하는 미디어 포맷과 Capture Devices에 대한 리스트

 여기에서는 JMF 2.1 에서 지원하는 멀티미디어 데이터 포맷과 RTP 통신 프로토콜에서 지원하는 멀티미디어 전송포맷(주의 : JMF에서는 가능한 모든 RTP 통신 포맷을 지원하지 않습니다.) 그리고 지원하는 캡쳐 장치에 대한 리스트 입니다. 

 

지원하는 멀티미디어 데이터 포맷 

 JMF에서는 8KHz 부터 48KHz까지의 sample rate를 가지는 오디오 데이터 포맷을 지원합니다. 주의할점은 JMF 2.1 for Java Clinets는 단지 다음의 sample rate만을 지원합니다: 8, 11.025, 11.127, 16, 22.05, 22.254, 32, 44.1, and 48 KHz. 그러므로 여러분이 일반적으로 사용하실때에는 8KHz, 16KHz , 44.1KHz, 48KHz등을 쓰면 무난하실겁니다.

 JMF 2.1에서는 아래 테이블에 명시된 멀티미디어 데이터 포맷을 지원합니다. 

  • D : 이 표시는 멀티미디어 데이터 포맷이 Decoding과 Presentation이 가능함을 나타냅니다. 
  • E : 이 표시는 멀티미디어 스트림이 특정포맷으로 Encoding이 가능함을 나타냅니다. 
  • read : 이 표시는 미디어 타입이 파일로부터 읽어들여질수 있음을 나타냅니다. 
  • write : 이 표시는 미디어 타입이 파일로 저장될수 있음을 나타냅니다. 

Media Type JMF 2.1 JMF 2.1 with Solaris Performance Pack JMF 2.1 with Windows Performance Pack
AIFF (.aiff) read/write read/write read/write
8-bit mono/stereo linear  D,E D,E D,E
16-bit mono/stereo linear  D,E D,E D,E
G.711 (U-law)  D,E D,E D,E
A-law  D D D
IMA4 ADPCM D,E D,E D,E
AVI (.avi) read/write read/write read/write
(실제로 테스트한 결과 AVI 포맷의 파일을 디스크에서 읽고 디스크로 저장하는 것이 가능했습니다.)
Audio: 8-bit mono/stereo linear  D,E D,E D,E
Audio: 16-bit mono/stereo linear  D,E D,E D,E
Audio: DVI ADPCM compressed  D,E D,E D,E
Audio: G.711 (U-law)  D,E D,E D,E
Audio: A-law  D D D
Audio: GSM mono D,E D,E D,E
Audio: ACM** - - D,E
Video: Cinepak  D D,E D
Video: Indeo (iv31 and iv32) - D D
Video: JPEG (411, 422, 111) D D,E D,E 
Video: RGB D,E D,E D,E 
Video: YUV D,E D,E D,E 
Video: VCM** - - D,E
Flash (.swf, .spl) read only read only read only
Macromedia Flash 2 D D D
GSM (.gsm) read/write read/write read/write
GSM mono audio D,E D,E D,E
HotMedia (.mvr) read only read only read only
IBM HotMedia D D D
MIDI (.mid) read only read only read only
Type 1 & 2 MIDI - D D
MPEG-1 Video (.mpg) - read only read only
(주의: 확장자가 mpg라고 해서 모든 mpg 파일이 읽혀지는 것이 아닙니다. 단지 mpeg -1 압축 방식을 따르는 Video stream만 가능합니다.)
Multiplexed System stream  - D D
Video-only stream  - D D
MPEG Layer II Audio (.mp2) read only read/write read/write
MPEG layer 1, 2 audio  D D,E D,E
MPEG Layer III Audio (.mp3) read only read/write read/write
MPEG layer 1, 2 or 3 audio  D D,E D,E
QuickTime (.mov) read/write read/write read/write
Audio: 8 bits mono/stereo linear  D,E D,E D,E
Audio: 16 bits mono/stereo linear D,E D,E D,E
Audio: G.711 (U-law)  D,E D,E D,E
Audio: A-law  D D D
Audio: GSM mono  D,E D,E D,E
Audio: IMA4 ADPCM  D,E D,E D,E
Video: Cinepak  D D,E D
Video: H.261 - D D
Video: H.263  D D,E D,E
Video: Indeo (iv31 and iv32)  - D D
Video: JPEG (411, 422, 111)  D D,E D,E
Video: RGB D,E D,E D,E
Sun Audio (.au) read/write read/write read/write
8 bits mono/stereo linear  D,E D,E D,E
16 bits mono/stereo linear  D,E D,E D,E
G.711 (U-law) D,E D,E D,E
A-law  D D D
Wave (.wav) read/write read/write read/write
8-bit mono/stereo linear  D,E D,E D,E
16-bit mono/stereo linear  D,E D,E D,E
G.711 (U-law) D,E D,E D,E
A-law  D D D
GSM mono  D,E D,E D,E
DVI ADPCM D,E D,E  D,E
MS ADPCM D D
ACM** - - D,E

Notes:

  • ACM** - Window's Audio Compression Manager support. Tested for these formats: A-law, GSM610, MSNAudio, MSADPCM, Truespeech, mp3, PCM, Voxware AC8, Voxware AC10.
  • VCM** - Window's Video Compression Manager support.  Tested for these formats: IV41, IV51, VGPX, WINX, YV12, I263, CRAM, MPG4.

 

RTP 에서 사용가능한 포맷

 JMF 2.1에서는 아래 테이블에 명시된 포맷을 RTP에서 이용할 수 있습니다. 

  • R : Decoding, Presentation 가능
  • T : Encoding과 Transmitting 가능 

Media Type RTP Payload JMF 2.1 JMF 2.1 with
Solaris Performance Pack
JMF 2.1 with
Windows Performance Pack
Audio: G.711 (U-law) 8 kHz  0 R,T R,T R,T
Audio: GSM mono  3 R,T R,T R,T
Audio: G.723 mono 4 R R,T R,T
Audio: 4-bit mono DVI 8 kHz  5 R,T R,T R,T
Audio: 4-bit mono DVI 11.025 kHz  16 R,T R,T R,T
Audio: 4-bit mono DVI 22.05 kHz  17 R,T R,T R,T
Audio: MPEG Layer I, II, III  14 R,T R,T R,T
Video: JPEG (411, 422, 111)*  26 R R,T R,T
Video: H.261  31 - R R
Video: H.263** 34 Mode A Only R,T R,T
Video: MPEG-I*** 32 T R,T R,T


[ 정말 주의 ]

* JPEG/RTP 의 경우 이미지 크기가 가로 세로 각각 8의 정부 크기가 되어야먄 전송이 가능합니다. 

** H.263/RTP 의 경우 전송 이미지 크기에 제한이 있습니다. 다음과 같은 크기만 이용이 가능합니다. : SQCIF (128x96), QCIF (176x144) and CIF (352x288). 

*** MPEG/RTP 의 경우 정말 문제가 많은데.. MPEG/RTP로의 전송을 위해서는 입력되는 미디어 콘텐츠가 미리 MPEG으로 부호화된 파일이거나 MPEG이 지원되는 캡쳐 소스여야만 이용이 가능합니다. 실시간 소프트웨어 MPEG encoding은 RTP 전송에 이용할 수 없습니다. 

Capture Devices

 아래 테이블에 나타난 캡쳐 장치의 경우 국내 실정과는 약간 거리가 있지만, 중요한 점은 윈도우 상에서 이용할때는 이용하고자 하는 캡쳐장치가 VFW 용의 캡쳐 드라이버를 제공해야 한다는 점 입니다. 

Capturer JMF 2.1 JMF 2.1 with Solaris Performance Pack JMF 2.1 with Windows Performance Pack
JavaSound (16-bit, 44100, 22050, 11025Hz, 8000Hz linear) - X X
SunVideo - X -
SunVideoPlus - X -
VFW - - X
Intel Create & Share - - Win9x
Diamond Supra Video Kit; Share - - Win98
QuickCam VC (camera) - - WinNT
e-cam (camera) - - WinNT, 9X
Winnow Videum - - WinNT, 9X
Creative Web Cam II - - Win9X
Miro Video DC30 - - Win9X
Iomega Buz - - Win9X
QuickCam Home USB (Camera) - - Win98
Samsung AnyCam USB Camera     Win98, Win2000, WinNT
Smart Video Recorder III - - Win9X


[주의]

QuickCam의 경우 2가지 경우가 있습니다. QuickCam VC의 경우에는 단지 윈도우NT에서만 지원이 되고, QuickCam HomeUSB의 경우에는 윈도우 9X에서만 지원이 됩니다. 많은 분들이 QuickCam VC를 윈도우 9x에서 인식시켜 JMF에서 이용하시려 할때 캡쳐 장치를 선택할 수 없는 문제가 발생하게 됩니다. 이부분 주의하세요.

Samsung Anycam USB의 경우 윈도우98,NT, 2000 버젼까지의 모든 캡쳐 드라이버가 제공이 됩니다.
반응형
반응형


JavaSound API 는 자바 플랫폼에서 audio 재생을 지원하기 위해 만들어졌다.
이 API는 J2SE 1.3 버전에서 처음 추가되었고, wav, au, aiff, midi 오디오 포멧만을 지원한
다.

mp3 나 ogg 파일 포멧을 사용하고 싶을때는 어떻게 해야 할까?
이러한 문제점을 해결하기 위해 JavaSound API  에서는 JavaSound Service Provider Interfaces (SPIs) 를 이용한 확장을 지원한다. 이 인터페이스를 통해서, 사용자가 구현하고자 하는 오디오포멧을 지원하면 된다.

이것은  JDBC와 같은 개념이다. DB서버가 각각 다르더라도, JDBC 인터페이스를 통해 통일된 DB프로그래밍을 할수 있는 것과 같은 개념이다.

JavaZoom 의 mp3 플러인
* 특징
- mp3 재생만 지원 (MPEG 1, 2 and 2.5, Layers 1, 2, and 3)
- 현재는 mp3 재생만 지원 (Encoding, Converter, Write 기능은 아직 구현되지 않음)
- 메타데이타 ID3 태그 지원 (artist, album, date, copyright, comments, 정보를 뽑아올수 있다)

mp3 를 파일에서 정보를 뽑아오는 방법
1. File 객체를 이용하여 AudioFileFormat 객체를 생성한다.
2. getFormat() 객체를 호출한다.
3. AudioFormat 인스턴스에서 값을 뽑아온다.

File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = null;
AudioFormat baseFormat = null;
baseFileFormat = AudioSystem.getAudioFileFormat(file);
baseFormat = baseFileFormat.getFormat();
AudioFileFormat.Type type = baseFileFormat.getType();
float frequency = baseFormat.getSampleRate();

To play MP3, you need first to call AudioSystem.getAudioInputStream(file) to get an AudioInputStream from an MP3 file, select the target format (i.e., PCM) according to input MP3 channels and sampling rate, and finally get an AudioInputStream with the target format. If JavaSound doesn't find a matching SPI implementation supporting the MP3-to-PCM conversion, then it will throw an exception.

File file = new File("filename.mp3");
AudioInputStream in= AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
 AudioFormat.Encoding.PCM_SIGNED, 
 baseFormat.getSampleRate(), 
 16,
 baseFormat.getChannels(), 
 baseFormat.getChannels() * 2,
 baseFormat.getSampleRate(),
 false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
// Play now.
rawplay(decodedFormat, din);
in.close();

Second, you have to send the decoded PCM data to a SourceDataLine. This means you have to load PCM data from the decoded AudioInputStream into the SourceDataLine buffer until the end of file is reached. JavaSound will send this data to the sound card. Once the file is exhausted, the line resources must be closed.

private void rawplay(AudioFormat targetFormat, AudioInputStream din)  throws IOException, LineUnavailableException {
 byte[] data = new byte[4096];
 SourceDataLine line = getLine(targetFormat);
 if (line != null) {
 // Start
 line.start();
 int nBytesRead = 0, nBytesWritten = 0;
 while (nBytesRead != -1) {
 nBytesRead = din.read(data, 0, data.length);
 if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead);
 }
 // Stop
 line.drain();
 line.stop();
 line.close();
 din.close();
 }
}

private SourceDataLine getLine(AudioFormat audioFormat)
 throws LineUnavailableException {
 SourceDataLine res = null;
 DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
 res = (SourceDataLine) AudioSystem.getLine(info);
 res.open(audioFormat);
 return res;
}


If you're familiar with JavaSound API, you will notice that source code for playing MP3 is similar to the what you'd use to play a WAV file. The source code sample above has no dependencies upon the MP3 SPI implementation. It's transparent for the developer.

Notice that if the file to play was stored on a web server, we would have used:
URL url = new URL(http://www.myserver.com/filename.mp3); AudioInputStream in= AudioSystem.getAudioInputStream(url);

instead of:
File file = new File("filename.mp3"); AudioInputStream in= AudioSystem.getAudioInputStream(file);

Metadata
Most audio formats include metadata such as title, album, comments, compression quality, encoding, and copyright. ID3 tags, used for MP3, are the best-known metadata format. Depending on ID3 version (v1 or v2), they can be found either at the end or at the beginning of an MP3 file. They include information such as duration, title, album, artist, track number, date, genre, copyright, etc. They can even include lyrics and pictures. The famous (and free) SHOUTcast streaming MP3 server, from Nullsoft, uses a different scheme in order to provide additional metadata such as title streaming, which allows a player to display the current song being played from the online radio stream. All of these metadata items need to be parsed and exposed through the SPI implementation. As of J2SE 1.5, the JavaSound API standardizes the passing of metadata parameters through an immutable java.util.Map:

File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = AudioSystem.getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
String key_author = "author";
String author = (String) properties.get(key_author);
String key_duration = "duration";
Long duration = (Long) properties.get(key_duration);

All metadata keys and types should be provided in the SPI documentation. However, common properties include:
"duration" (Long): Playback duration of file, in microseconds
"author" (String): Name of the author of the file
"title" (String): Title of the file
"copyright" (String): Copyright message
"comment" (String): Arbitrary text

Using Multiple SPIs in an Application
Adding MP3 audio capabilities to the Java platform means adding JAR files containing the MP3 SPI implementation to the runtime CLASSPATH. Adding Ogg Vorbis, Speex, Flac, or Monkey's Audio support would be similar, but could generate conflicts that make other SPI implementations fail. The following situation could occur:

Your runtime application CLASSPATH includes both MP3 and Ogg Vorbis SPIs.
Your application tries to play an MP3 file.
JavaSound's AudioSystem tries Ogg Vorbis SPI first.
The Ogg Vorbis SPI implementation doesn't detect that incoming file isn't an Ogg-Vorbis-compliant stream, so it doesn't throw any exception.
Your application tries to play an MP3 with the Ogg Vorbis SPI. At best you will get a runtime exception (NullPointerException, ArrayIndexOutOfBoundException), and in the worst case, you will hear weird noises or just deadlock.
In the example above, it's true that the problem comes from the Ogg Vorbis SPI implementation, but it's not easy for the SPI provider to have reliable controls (just think about streaming). Thus, each SPI provider has to pay attention to the others. That's the main practical drawback of the JavaSound plugin architecture. So don't be surprised if you have problems making multiple SPIs work together in your application.

Differences with JMF
JMF stands for Java Media Framework. It's an optional J2SE packages that adds multimedia support to the Java platform. It includes audio (GSM, QuickTime, etc.), video (AVI, QuickTime, H.263, etc.) and RTP streaming features. JMF provides a plugin architecture, but it is not compliant with that of JavaSound. In fact, MP3 support was previously included in JMF, but it was removed in 2002 because of licensing issues.

Conclusion
JavaSound rocks. It provides a plugin architecture allowing any third-party provider to add custom audio format support, such as for MP3 files. API is flexible enough to plug most heterogeneous (lossy, lossless) audio formats, whatever their parameters and metadata, to the Java platform -- "Write once, play anywhere."

References and Resources

JLayer: Java library for decoding and converting MP3 files
MP3 SPI: MP3 plugin for the Java platform
Speex SPI: Speex plugin for the Java platform
Ogg Vorbis SPI: Ogg Vorbis plugin for the Java platform
Monkey's Audio SPI: Monkey's Audio plugin for the Java platform
Flac SPI: Flac plugin for the Java platform
SHOUTcast: SHOUTcast streaming MP3 server
jlGui player: Music player for the Java platform -- a WinAmp clone
JavaSound: SUN homepage
Tritonus: Tritonus project
MP3 Tech: MP3 frame header info
ID3: ID3 definition
The JavaZOOM Team are the authors of the open source projects JLayer and jlGui.


<출처: http://zyint.tistory.com/1 >

+ Recent posts