Share via


MediaMuxer 클래스

정의

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
특성

설명

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

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
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을 용이하게 합니다.

적용 대상