Class Transformer


  • @RequiresApi(18)
    public final class Transformer
    extends Object
    A transformer to transform media inputs.

    The same Transformer instance can be used to transform multiple inputs (sequentially, not concurrently).

    Transformer instances must be accessed from a single application thread. For the vast majority of cases this should be the application's main thread. The thread on which a Transformer instance must be accessed can be explicitly specified by passing a Looper when creating the transformer. If no Looper is specified, then the Looper of the thread that the Transformer.Builder is created on is used, or if that thread does not have a Looper, the Looper of the application's main thread is used. In all cases the Looper of the thread from which the transformer must be accessed can be queried using getApplicationLooper().

    • Field Detail

      • PROGRESS_STATE_WAITING_FOR_AVAILABILITY

        public static final int PROGRESS_STATE_WAITING_FOR_AVAILABILITY
        Indicates that the progress is unavailable for the current transformation, but might become available.
        See Also:
        Constant Field Values
      • PROGRESS_STATE_AVAILABLE

        public static final int PROGRESS_STATE_AVAILABLE
        Indicates that the progress is available.
        See Also:
        Constant Field Values
      • PROGRESS_STATE_UNAVAILABLE

        public static final int PROGRESS_STATE_UNAVAILABLE
        Indicates that the progress is permanently unavailable for the current transformation.
        See Also:
        Constant Field Values
      • PROGRESS_STATE_NO_TRANSFORMATION

        public static final int PROGRESS_STATE_NO_TRANSFORMATION
        Indicates that there is no current transformation.
        See Also:
        Constant Field Values
    • Method Detail

      • startTransformation

        public void startTransformation​(MediaItem mediaItem,
                                        String path)
                                 throws IOException
        Starts an asynchronous operation to transform the given MediaItem.

        The transformation state is notified through the listener.

        Concurrent transformations on the same Transformer object are not allowed.

        The output can contain at most one video track and one audio track. Other track types are ignored. For adaptive bitrate media sources, the highest bitrate video and audio streams are selected.

        Parameters:
        mediaItem - The MediaItem to transform. The supported sample formats depend on the Muxer and on the output container format. For the FrameworkMuxer, they are described in MediaMuxer.addTrack(MediaFormat).
        path - The path to the output file.
        Throws:
        IllegalArgumentException - If the path is invalid.
        IllegalStateException - If this method is called from the wrong thread.
        IllegalStateException - If a transformation is already in progress.
        IOException - If an error occurs opening the output file for writing.
      • startTransformation

        @RequiresApi(26)
        public void startTransformation​(MediaItem mediaItem,
                                        ParcelFileDescriptor parcelFileDescriptor)
                                 throws IOException
        Starts an asynchronous operation to transform the given MediaItem.

        The transformation state is notified through the listener.

        Concurrent transformations on the same Transformer object are not allowed.

        The output can contain at most one video track and one audio track. Other track types are ignored. For adaptive bitrate media sources, the highest bitrate video and audio streams are selected.

        Parameters:
        mediaItem - The MediaItem to transform. The supported sample formats depend on the Muxer and on the output container format. For the FrameworkMuxer, they are described in MediaMuxer.addTrack(MediaFormat).
        parcelFileDescriptor - A readable and writable ParcelFileDescriptor of the output. The file referenced by this ParcelFileDescriptor should not be used before the transformation is completed. It is the responsibility of the caller to close the ParcelFileDescriptor. This can be done after this method returns.
        Throws:
        IllegalArgumentException - If the file descriptor is invalid.
        IllegalStateException - If this method is called from the wrong thread.
        IllegalStateException - If a transformation is already in progress.
        IOException - If an error occurs opening the output file for writing.
      • getApplicationLooper

        public Looper getApplicationLooper()
        Returns the Looper associated with the application thread that's used to access the transformer and on which transformer events are received.
      • cancel

        public void cancel()
        Cancels the transformation that is currently in progress, if any.
        Throws:
        IllegalStateException - If this method is called from the wrong thread.