MediaPlayer setDataSource, better to use path or FileDescriptor?

前端 未结 2 1123
傲寒
傲寒 2020-11-30 04:58

Let\'s say I have a full path to a file. Which is the better approach to loading that file into a MediaPlayer?

String filePath = \"somepath/somefile.mp3\"         


        
2条回答
  •  北荒
    北荒 (楼主)
    2020-11-30 05:43

    MediaPlayer.java has setDataSource() signatures that accept both a String (path) and an FD. They both eventually go into native C code. Although one of these may be SLIGHTLY more efficient it will be negligible unless you're setting your data source more often than once a second.

    /**
     * Sets the data source (file-path or http/rtsp URL) to use. Call this after 
     * reset(), or before any other method (including setDataSource()) that might
     * throw IllegalStateException in this class.
     * 
     * @param path the path of the file, or the http/rtsp URL of the stream you want to play
     * @throws IllegalStateException if it is called
     * in an order other than the one specified above
     */
    public native void setDataSource(String path) throws IOException, IllegalArgumentException, IllegalStateException;
    
    /**
     * Sets the data source (FileDescriptor) to use. It is the caller's responsibility
     * to close the file descriptor. It is safe to do so as soon as this call returns.
     * Call this after reset(), or before any other method (including setDataSource()) 
     * that might throw IllegalStateException in this class.
     * 
     * @param fd the FileDescriptor for the file you want to play
     * @throws IllegalStateException if it is called
     * in an order other than the one specified above
     */
    public void setDataSource(FileDescriptor fd) 
            throws IOException, IllegalArgumentException, IllegalStateException {
        // intentionally less than LONG_MAX
        setDataSource(fd, 0, 0x7ffffffffffffffL);
    }
    
    /**
     * Sets the data source (FileDescriptor) to use.  It is the caller's responsibility
     * to close the file descriptor. It is safe to do so as soon as this call returns.
     * Call this after reset(), or before any other method (including setDataSource()) 
     * that might throw IllegalStateException in this class.
     * 
     * @param fd the FileDescriptor for the file you want to play
     * @param offset the offset into the file where the data to be played starts, in bytes
     * @param length the length in bytes of the data to be played
     * @throws IllegalStateException if it is called
     * in an order other than the one specified above
     */
    public native void setDataSource(FileDescriptor fd, long offset, long length) 
            throws IOException, IllegalArgumentException, IllegalStateException;
    

提交回复
热议问题