MediaMuxer 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다.
[Android.Runtime.Register("android/media/MediaMuxer", DoNotGenerateAcw=true)]
public sealed class MediaMuxer : Java.Lang.Object
[<Android.Runtime.Register("android/media/MediaMuxer", DoNotGenerateAcw=true)>]
type MediaMuxer = class
inherit Object
- 상속
- 특성
설명
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. 현재 MediaMuxer는 MP4, Webm 및 3GP 파일을 출력으로 지원합니다. 또한 Android Nougat 이후 MP4에서 Muxing B 프레임을 지원합니다.
일반적으로 다음과 같이 사용됩니다.
MediaMuxer muxer = new MediaMuxer("temp.mp4", OutputFormat.MUXER_OUTPUT_MPEG_4);
// More often, the MediaFormat will be retrieved from MediaCodec.getOutputFormat()
// or MediaExtractor.getTrackFormat().
MediaFormat audioFormat = new MediaFormat(...);
MediaFormat videoFormat = new MediaFormat(...);
int audioTrackIndex = muxer.addTrack(audioFormat);
int videoTrackIndex = muxer.addTrack(videoFormat);
ByteBuffer inputBuffer = ByteBuffer.allocate(bufferSize);
boolean finished = false;
BufferInfo bufferInfo = new BufferInfo();
muxer.start();
while(!finished) {
// getInputBuffer() will fill the inputBuffer with one frame of encoded
// sample from either MediaCodec or MediaExtractor, set isAudioSample to
// true when the sample is audio data, set up all the fields of bufferInfo,
// and return true if there are no more samples.
finished = getInputBuffer(inputBuffer, isAudioSample, bufferInfo);
if (!finished) {
int currentTrackIndex = isAudioSample ? audioTrackIndex : videoTrackIndex;
muxer.writeSampleData(currentTrackIndex, inputBuffer, bufferInfo);
}
};
muxer.stop();
muxer.release();
<h4>메타데이터 트랙</h4>
프레임별 메타데이터는 오프라인 처리를 용이하게 하기 위해 비디오 또는 오디오와 상관 관계가 있는 정보를 전달합니다. 예를 들어 센서의 자이로 신호는 오프라인 처리를 수행할 때 비디오 안정화에 도움이 될 수 있습니다. 메타데이터 트랙은 MP4 컨테이너 형식으로 멀티플렉싱할 때만 지원됩니다. 새 메타데이터 트랙을 추가할 때 MIME 형식 형식은 접두사 "application/"(예: "application/gyro")로 시작해야 합니다. 메타데이터의 형식은 애플리케이션에서 정의됩니다. 메타데이터 타임스탬프는 비디오 및 오디오 타임스탬프와 동일한 시간 기반에 있어야 합니다. 생성된 MP4 파일은 TextMetaDataSampleEntry(ISOBMFF 사양의 섹션 12.3.3.2에 정의됨)를 사용하여 메타데이터의 MIME 형식에 신호를 보냅니다.
MediaMuxer muxer = new MediaMuxer("temp.mp4", OutputFormat.MUXER_OUTPUT_MPEG_4);
// SetUp Video/Audio Tracks.
MediaFormat audioFormat = new MediaFormat(...);
MediaFormat videoFormat = new MediaFormat(...);
int audioTrackIndex = muxer.addTrack(audioFormat);
int videoTrackIndex = muxer.addTrack(videoFormat);
// Setup Metadata Track
MediaFormat metadataFormat = new MediaFormat(...);
metadataFormat.setString(KEY_MIME, "application/gyro");
int metadataTrackIndex = muxer.addTrack(metadataFormat);
muxer.start();
while(..) {
// Allocate bytebuffer and write gyro data(x,y,z) into it.
ByteBuffer metaData = ByteBuffer.allocate(bufferSize);
metaData.putFloat(x);
metaData.putFloat(y);
metaData.putFloat(z);
BufferInfo metaInfo = new BufferInfo();
// Associate this metadata with the video frame by setting
// the same timestamp as the video frame.
metaInfo.presentationTimeUs = currentVideoTrackTimeUs;
metaInfo.offset = 0;
metaInfo.flags = 0;
metaInfo.size = bufferSize;
muxer.writeSampleData(metadataTrackIndex, metaData, metaInfo);
};
muxer.stop();
muxer.release();
}
<h2 id=History>"History">기능 및 API 기록</h2>
다음 표에는 다양한 API 버전 및 컨테이너의 기능 지원이 요약되어 있습니다. API 버전 번호는 를 참조하세요 android.os.Build.VERSION_CODES
.
<style> .api > tr > th, .api > tr > td { text-align: center; padding: 4px 4px; } .api > tr > th { vertical-align: bottom; } .api > tr > td { vertical-align: middle; } .sml > tr th, .sml > tr >> td { text-align: center; padding: 2px 4px; } .fn { text-align: center; }</스타일>
<table align="right" style="width: 0%">thead><tbody class=api<>tr><th>Symbol</th th<>>Meaning</th></tr></tbody<>/thead><tbody class=sml><tr><td>●</td td><>Supported</td></tr tr<>td>><○</td td>><Not supported</td></tr tr><><td>▧</td td>><supported in< MP4/WebM/3GP/td/tr tr td><><>⁕</td td><>MP4</td/tbody<><><>/table><table align="center" style="width: 100%;"<>><<thead class=api><tr><th rowspan=2>Feature</th th<>colspan="24">SDK Version</th></tr tr><><th>18</th<>>th 19</th<>th>20</th><>21</th><>22</th><>23</th<>>th 24</th><>th 25</th<>>th 26+</th></tr></thead><tbody class=api><tr><td align="center">MP4 container</td td>><●</td td>●</td><><td>●</td<>td>●</td<>td>●</td><td>●/td><td>●</td td>●<</td<>td><●/td<>/tr<>td align="center">WebM container</td td><>○/td td>><○<</td td>><○</td<>td>●</td><td>●/td><td>●<</td td><>●</td><td>●/td td<>td>●<</td td<>><><td align="center">3GP container</td td<>>○</td td<>>○</td td>><○</td><td>○</td td>><○</td<>td>○</td<>td>○</td<>td>○/td td>><●<</td/tr><td>< align="center">Muxing B-Frames(양방향 예측 프레임)</td td>><○</td td><>○</td td>><○</td td<>>○</td td tdd>><○</td td><>○</td td>><⁕</td td>><⁕</td td><>⁕</td<>/tr/tr><>< td align=" center">Muxing Single Video/Audio Track</td td>><▧</td td>><▧</td<>td>▧</td td<>>▧</td<>td>▧</td><td>▧</td<>td>▧</td<>td>▧/td><td>▧<</td<>/tr tr<>>< td align="center">여러 비디오/오디오 트랙</td td><>○/td td○</td><td>○○</td><td>○</td><td>>○<</td><><td○/td<>td>○</td><td>>○</td td><>⁕<</td></tr/tr>< tr><td align="center">Muxing 메타데이터 트랙</td td><>○</td td><>○</td td><>○</td td>><○</td<>td>○</td<>td>○</td><td>○</td td>><○/td td<>>⁕<</td<>/tr<>/tbody></table>
에 대한 Java 설명서입니다 android.media.MediaMuxer
.
이 페이지의 일부는 만들고 공유하며 에 설명된 조건에 따라 사용되는 작업을 기반으로 수정됩니다.
생성자
MediaMuxer(FileDescriptor, MuxerOutputType) |
지정된 FileDescriptor에 쓰는 미디어 muxer를 만듭니다. |
MediaMuxer(String, MuxerOutputType) |
지정된 경로에 쓰는 미디어 muxer를 만듭니다. |
속성
Class |
이 |
Handle |
기본 Android instance 대한 핸들입니다. (다음에서 상속됨 Object) |
JniIdentityHashCode |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
JniPeerMembers |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. |
PeerReference |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
ThresholdClass |
이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. (다음에서 상속됨 Object) |
ThresholdType |
이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. (다음에서 상속됨 Object) |
메서드
AddTrack(MediaFormat) |
지정된 형식의 트랙을 추가합니다. |
Clone() |
이 개체의 복사본을 만들고 반환합니다. (다음에서 상속됨 Object) |
Dispose() |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
Dispose(Boolean) |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
Equals(Object) |
다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다. (다음에서 상속됨 Object) |
GetHashCode() |
개체의 해시 코드 값을 반환합니다. (다음에서 상속됨 Object) |
JavaFinalize() |
가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다. (다음에서 상속됨 Object) |
Notify() |
이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다. (다음에서 상속됨 Object) |
NotifyAll() |
이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다. (다음에서 상속됨 Object) |
Release() |
나중에 가비지 수집기에서 이 작업을 수행하는 대신 리소스를 확보하려면 이 작업을 호출해야 합니다. |
SetHandle(IntPtr, JniHandleOwnership) |
Handle 속성을 설정합니다. (다음에서 상속됨 Object) |
SetLocation(Single, Single) |
출력 파일에 지오데이터(위도 및 경도)를 설정하고 저장합니다. |
SetOrientationHint(Int32) |
출력 비디오 재생에 대한 방향 힌트를 설정합니다. |
Start() |
muxer를 시작합니다. |
Stop() |
muxer를 중지합니다. |
ToArray<T>() |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
ToString() |
개체의 문자열 표현을 반환합니다. (다음에서 상속됨 Object) |
UnregisterFromRuntime() |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
Wait() |
현재 스레드가 깨어날 때까지 대기하게 합니다( 일반적으로 <알림을 받><거나 <>중단/>em>)합니다<. (다음에서 상속됨 Object) |
Wait(Int64) |
현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다. (다음에서 상속됨 Object) |
Wait(Int64, Int32) |
현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다. (다음에서 상속됨 Object) |
WriteSampleData(Int32, ByteBuffer, MediaCodec+BufferInfo) |
인코딩된 샘플을 muxer에 씁니다. |
명시적 인터페이스 구현
IJavaPeerable.Disposed() |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
IJavaPeerable.Finalized() |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
IJavaPeerable.JniManagedPeerState |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. (다음에서 상속됨 Object) |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. |
GetJniTypeName(IJavaPeerable) |
MediaMuxer는 기본 스트림의 muxing을 용이하게 합니다. |