자바 모바일 미디어 API

Java Mobile Media API

MMAPI(Mobile Media API)는 Java ME 플랫폼 CDC휴대 전화와 같은 CLDC 장치의 API 규격이다.API는 구현 방법에 따라 응용 프로그램이 사운드와 비디오를 재생 및 녹음하고 스틸 이미지를 캡처할 수 있도록 한다.MMAPI는 Java Community Process에 따라 JSR 135로 개발되었다.

프로그래밍 개념

Multimedia Java API는 4가지 주요 유형의 클래스를 기반으로 한다.javax.microedition.media 패키지—더ManagerPlayerPlayerListener그리고 다양한 종류의Control.

JSR 135를 사용하고자 하는 Java ME 프로그래머들은 먼저 JSR 135의 정적 방법을 사용할 것이다.Manager class. 비록 다음과 같은 다른 방법들이 있지만playTone, 사용된 주요 방법은createPlayer. 이 작업은 URI 또는 AND 중 하나를 필요로 한다.InputStream, 및 MIME 유형.대부분의 경우 URI가 사용된다.사용되는 일반적인 URI 프로토콜은 다음과 같다.

  • 파일:
  • 리소스: (MIDlet의 JAR 내에서 파일을 추출할 수 있지만 구현에 따라 다름)
  • http:
  • rtsp:
  • 캡처: (오디오 또는 비디오 녹화에 사용)

MIME 유형은 선택 사항이며, 제공되지 않을 경우 전달된 데이터로부터 유추된다.

createPlayer방법은 의 실행을 반환한다.Player 인터페이스(캡처: 프로토콜 URI를 사용하는 경우에도).이는 미디어의 시작과 중단 등 모든 플레이어에 적용할 수 있는 핵심 방법을 갖고 있으며, 이를 반복해 달라고 요청한다.당신은 또한 할 수 있다.setPlayerListener을 구현하는 대상에PlayerListener인터페이스: 클립과 관련된 다양한 이벤트(시작, 중지, 미디어 마감 등)를 수신함

Player수업은 또한 a를 가지고 있다.getControl특정의 구현을 반환하는 방법Control….Control일부 미디어 유형에 적용되지 않는 선택적 API를 처리한다.임의의Player주어진 구현을 제공할 수 있거나 제공할 수 없을 수 있음Control.

(일반적으로, 더.Control반환된 것은 사실Player그 자체로, 그러나 이것은 보장되지 않는다.)

에 의해 구현된 제어 장치 집합Player제한되지 않는다. 그러나 일부 표준은 다음에서 정의된다.javax.microedition.media.controlJSR별 패키지:

표준 MMAPI 컨트롤
제어 인터페이스 설명
프레임 포지셔닝 컨트롤 개별 프레임에 액세스할 수 있는 비디오 데이터 제어.
GUIControl 비디오와 같이 디스플레이가 필요한 데이터에 대한 컨트롤.
메타데이터제어 제목, 저작권, 저자 등 아메디아 스트림 내에 저장된 메타데이터 정보를 결정하는 데 사용된다.
미디콘트롤 장치의 MIDI 플레이어에 액세스할 수 있는 완전한 기능 제어.
피치 컨트롤 오디오 데이터의 피치(주파수)를 제어하는 데 사용된다.
레이트컨트롤 플레이어의 재생 속도를 제어하는 데 사용된다.
레코드 컨트롤 카메라의 비디오나 녹음기의 오디오와 같은 캡처 장치의 데이터 녹음을 제어할 수 있다.
StopTimeControl 플레이어가 게임을 중지할 때 미리 설정된 시간을 설정할 수 있는 컨트롤.
템포 컨트롤 RateControl과 마찬가지로, 이 컨트롤은 오디오 플레이어(일반적으로 MIDI 플레이어)의 재생 속도(속도)를 변경할 수 있게 해준다.
톤컨트롤 단조로운 톤 시퀀스를 재생할 수 있는 완전한 기능 제어.
비디오 컨트롤 GUIControl을 확장하고 비디오의 디스플레이를 제어한다.
볼륨 컨트롤 에서 오디오 볼륨을 제어할 수 있는 가장 간단한 컨트롤Player.

(기타 정의는 JSR 234(Advanced Multimedia Supplements)에서 정의할 수 있다.

JSR 135의 하위 집합은 JSR 118 (MIDP 2.0)에 정의되어 있다.

플레이어 라이프사이클

관련된 프로토콜 또는 미디어 유형에 관계없이Player라이프사이클 동안 동일한 개별 상태를 이동한다.이러한 상태는 아래 표에 나열되어 있다.

플레이어 인스턴스의 수명 주기 상태
설명
미실현 플레이어가 생성될 때 초기 상태.이 상태에서 플레이어는 미디어를 처리하는 데 필요한 자원을 획득하기에 충분한 정보를 가지고 있지 않다.
실현된 플레이어가 자원을 획득하는 데 필요한 정보를 얻으면 Realized 상태로 이동한다.이 상태에서는 대부분의 자원이 이미 획득되어 제 기능을 하고 있을 가능성이 높다.그러나, 특히 독점적인 접근을 얻어야 하는 오디오나 비디오 드라이버와 같은 시스템 의존성이 관련된 경우, 이 시점에서 일부 자원은 획득되지 않았을 수 있다.
프리페치드 플레이어는 희소 자원 및 시스템 의존 자원을 포함한 모든 자원을 획득한 후 프리페치 상태로 이동한다.일단 Prefetched 상태가 되면 플레이어는 자신의 임무를 수행하는 데 필요한 모든 것을 가지고 있다.
시작된 시작 상태의 플레이어는 플레이어와 관련된 내용이 처리되고 있음을 나타낸다.
닫힌 플레이어는 라이프사이클이 끝날 때 닫힘 상태로 이동한다.닫힌 상태의 플레이어를 다시 사용하면 안 된다.

구현

대부분의 Java ME 규격과 마찬가지로, 일관성을 보장하기 위해 규격 작성자의 최선의 노력에도 불구하고 구현은 다르다.두 가지 분명한 차이 영역은 우선 지원되는 제어장치와 허용 가능한 URI 유형에 있다. 모호한 영역은 믹싱이 지원되는지 여부다; 많은 게임들은 MIDI 음악 트랙을 재생하고 PCM 사운드 효과를 맨 위에 레이어 하기를 원한다.

극단적 분산의 또 다른 원천은 성과에 있다.예를 들어 HTTP 클립이 요청되는 경우 클립은 어느 시점에 다운로드되는가?명세서는 2가지를 제공하여 이를 인식한다.Player실제 게임을 하기 전에 미리 호출할 수 있는 방법:realize그리고prefetch구현에 따라 클립을 재생 가능한 상태로 만드는 작업이 일부 수행될 수 있으므로 클립이 필요할 때 실제로 재생하는 것이 더 빠를 수 있다.일부 구현은 클립이 재생되는 동안 요청에 따라 실제로 스트리밍할 수 있을 정도로 정교하다.

Symbian OS는 JSR 135의 매우 완전한 구현을 포함하고 있지만, 이것조차 기기의 기본 멀티미디어 기능에 크게 의존하고 있으며, 일부 장치 제조업체는 기록과 같은 자바 ME의 더 모호한 부분을 노출하지 않는 것을 선택할 수 있다.

모든 구현이 자바 기술 호환성 키트(TCK)를 통과하도록 강제함으로써 구현 일관성이 확보된다.이렇게 하면 지원되는 각 URI 스키마, MIME 유형 및 제어는 테스트되지만 이러한 선택적 부품의 모든 순열을 테스트하지는 않는다.

코드 예제

꾸러미 org.properties;  수입하다 자바스.마이크로디션.미들렛*; 수입하다 자바스 마이크로디션 미디어*;  공중의 계급 심플플레이어 연장하다 미들렛 {      보호받는 공허하게 하다 디스트로이앱(부울 arg0) 던지다 MIDletStateChangeException {}       보호받는 공허하게 하다 일시 중지앱() {}       보호받는 공허하게 하다 시작앱() 던지다 MIDletStateChangeException {           해보다 {                 url = "http://upload.wikimedia.org/wikipedia/commons/a/a0/Bass_sample.mid";                플레이어 선수 = 관리자.createPlayer(url);                선수.출발하다();           } 잡히다 (예외 e) {                e.printStackTrace();           }      } } 

참고 항목

참고 문헌 목록

  • Goyal, Vikram (May 1, 2006). Pro Java ME MMAPI: Mobile Media API for Java Micro Edition (1st ed.). Apress. p. 250. ISBN 1-59059-639-0.

외부 링크