0

我在 TextureView 中放入了一个 MediaPlayer,它本身位于 ListView 中。

昨天,MediaPlayer 按预期使用了一个测试 .mp4 剪辑。今天,MediaPlayer 尝试做某种 FFmpeg 提取器,但我一直无法找到任何相关信息。

这是堆栈跟踪:

03-14 13:43:00.076 477-16532/? V/FFmpegExtractor: SniffFFMPEG
03-14 13:43:00.076 477-16532/? I/FFmpegExtractor: android-source:0xafcff040
03-14 13:43:00.077 477-16532/? D/FFMPEG: android source begin open
03-14 13:43:00.077 477-16532/? D/FFMPEG: android open, url: android-source:0xafcff040
03-14 13:43:00.077 477-16532/? D/FFMPEG: ffmpeg open android data source success, source ptr: 0xafcff040
03-14 13:43:00.077 477-16532/? D/FFMPEG: android source open success
03-14 13:43:00.149 477-16532/? I/FFMPEG: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'android-source:0xafcff040':
03-14 13:43:00.149 477-16532/? I/FFMPEG:   Metadata:
03-14 13:43:00.149 477-16532/? I/FFMPEG:     major_brand     : qt  
03-14 13:43:00.149 477-16532/? I/FFMPEG:     minor_version   : 0
03-14 13:43:00.149 477-16532/? I/FFMPEG:     compatible_brands: qt  
03-14 13:43:00.149 477-16532/? I/FFMPEG:     creation_time   : 2016-03-13 19:24:58
03-14 13:43:00.149 477-16532/? I/FFMPEG:   Duration: 00:00:10.88, start: 0.000000, bitrate: 11209 kb/s
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 86 kb/s (default)
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 11113 kb/s, 29.98 fps, 29.97 tbr, 600 tbn, 50 tbc (default)
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
03-14 13:43:00.149 477-16532/? I/FFMPEG:       encoder         : H.264
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:2(und): Data: none (mebx / 0x7862656D), 1 kb/s (default)
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: FFmpegExtrator, url: android-source:0xafcff040, format_name: mov,mp4,m4a,3gp,3g2,mj2, format_long_name: QuickTime / MOV
03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: list the formats suppoted by ffmpeg: 
03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: ========================================
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[00]: mpeg
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[01]: mpegts
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[02]: mov,mp4,m4a,3gp,3g2,mj2
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[03]: matroska,webm
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[04]: asf
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[05]: rm
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[06]: flv
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[07]: swf
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[08]: avi
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[09]: ape
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[10]: dts
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[11]: flac
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[12]: ac3
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[13]: wav
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[14]: ogg
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[15]: vc1
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[16]: hevc
03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: ========================================
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: major_brand tag is:qt  
03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: [mp4]format is mov, confidence should be larger than mpeg4
03-14 13:43:00.149 477-16532/? D/FFMPEG: android source close
03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: sniff through BetterSniffFFMPEG success
03-14 13:43:00.149 477-16532/? D/FFmpegExtractor: ffmpeg detected media content as 'video/mp4' with confidence 0.41
03-14 13:43:00.149 477-16532/? I/MediaExtractor: Use extended extractor for the special mime(video/mp4) or codec
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: FFmpegExtractor::FFmpegExtractor
03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: mFilename: android-source:0xafcff040
03-14 13:43:00.150 477-16532/? D/FFMPEG: android source begin open
03-14 13:43:00.150 477-16532/? D/FFMPEG: android open, url: android-source:0xafcff040
03-14 13:43:00.150 477-16532/? D/FFMPEG: ffmpeg open android data source success, source ptr: 0xafcff040
03-14 13:43:00.150 477-16532/? D/FFMPEG: android source open success
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: file startTime: 0
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: the duration is 00:00:10.87
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: stream_index: 0
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: support the codec(aac)
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: Tag mp4a/0x6134706d with codec(aac)
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: audio stream extradata(2):
03-14 13:43:00.230 477-16532/? V/codec_utils: AAC
03-14 13:43:00.230 477-16532/? V/codec_utils: aac profile: 1, sf_index: 4, channel: 1
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: bit_rate: 86249, sample_rate: 44100, channels: 1, bits_per_coded_sample: 16, block_align:0
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: the time is 00:00:10.93
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: audio startTime:0
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: create a audio track
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: stream_index: 1
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: support the codec(h264)
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: Tag avc1/0x31637661 with codec(h264)
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: video stream extradata:
03-14 13:43:00.230 477-16532/? V/codec_utils: AVC
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: width: 1920, height: 1080, bit_rate: 11113682
03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: the time is 00:00:10.87
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: video startTime:0
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: create a video track
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: the stream is AVC, the length of a NAL unit: 4
03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: Starting reader thread
03-14 13:43:00.230 477-16532/? D/FFmpegExtractor: Reader thread started
03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: mProbePkts: 0, mEOF: 0, pb->error(if has): 0, mDefersToCreateVideoTrack: 0, mDefersToCreateAudioTrack: 0
03-14 13:43:00.231 477-16532/? D/FFmpegExtractor: supported mime: video/mp4
03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getMetaData
03-14 13:43:00.231 477-16537/? V/FFmpegExtractor: FFmpegExtractor enter thread(readerEntry)
03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrack[0]
03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrackMetaData[0]
03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrack[1]
03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrackMetaData[1]
03-14 13:43:00.232 10973-10973/com.hobbyte.touringandroid E/MediaPlayer: Should have subtitle controller already set

在尝试播放视频文件时,我得到了这个日志:

03-14 13:52:06.133 743-821/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client
03-14 13:52:06.133 477-477/? D/NuPlayerDriver: start(0xb0f05040)
03-14 13:52:06.133 477-16531/? I/GenericSource: start
03-14 13:52:06.133 477-16531/? V/FFmpegExtractor: FFmpegExtractor::Track::start audio
03-14 13:52:06.133 477-16531/? V/FFmpegExtractor: FFmpegExtractor::Track::start video
03-14 13:52:06.133 477-16532/? V/FFmpegExtractor: read audio flush pkt
03-14 13:52:06.133 477-16532/? V/FFmpegExtractor: read video flush pkt
03-14 13:52:06.139 477-24743/? D/SoftFFmpegAudio: SoftFFmpegAudio component: OMX.ffmpeg.aac.decoder mMode: 1
03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: get pcm params, nChannels:4294967295, nSamplingRate:4294967295
03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: set OMX_IndexParamAudioPcm, nChannels:1, nSampleRate:44100, nBitsPerSample:16
03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: set OMX_IndexParamAudioAac, nChannels:1, nSampleRate:44100
03-14 13:52:06.141 477-24743/? E/OMXNodeInstance: setParameter(1866465283) ERROR: 0x8000101a
03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: get pcm params, nChannels:1, nSamplingRate:44100
03-14 13:52:06.147 477-24744/? E/OMXNodeInstance: OMX_GetExtensionIndex OMX.google.android.index.storeMetaDataInBuffers failed
03-14 13:52:06.147 477-24744/? E/ACodec: [OMX.google.h264.decoder] storeMetaDataInBuffers failed w/ err -2147483648
03-14 13:52:06.149 477-24745/? I/SoftFFmpegAudio: got extradata, ignore: 0, size: 2
03-14 13:52:06.150 477-24745/? I/SoftFFmpegAudio: extradata is ready, size: 2
03-14 13:52:06.150 477-24745/? D/SoftFFmpegAudio: begin to open ffmpeg audio decoder(aac), mCtx sample_rate: 44100, channels: 1, , sample_fmt: (null)
03-14 13:52:06.154 477-24745/? D/SoftFFmpegAudio: open ffmpeg audio decoder(aac) success, mCtx sample_rate: 44100, channels: 1, sample_fmt: fltp
03-14 13:52:06.154 477-24745/? I/SoftFFmpegAudio: Create sample rate converter for conversion of 44100 Hz fltp 1 channels(mono) to 44100 Hz s16 1 channels(mono)!
03-14 13:52:06.154 477-24743/? V/SoftFFmpegAudio: get pcm params, nChannels:1, nSamplingRate:44100
03-14 13:52:06.155 477-24739/? D/AudioSink: bufferCount (8) is too small and increased to 12
03-14 13:52:06.162 477-24747/? E/SoftAVC: Decoder failed: -2
03-14 13:52:06.162 477-24744/? E/ACodec: [OMX.google.h264.decoder] ERROR(0x80001001)
03-14 13:52:06.162 477-24744/? E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
03-14 13:52:06.163 477-24741/? E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6
03-14 13:52:06.167 477-24740/? E/NuPlayerDecoder: Failed to queue input buffer for OMX.google.h264.decoder (err=-38)
03-14 13:52:06.167 477-16531/? E/NuPlayer: received error(0xffffffda) from video decoder, flushing(0), now shutting down
03-14 13:52:06.168 10973-11040/com.hobbyte.touringandroid E/MediaPlayer: error (1, -38)
03-14 13:52:06.168 10973-10973/com.hobbyte.touringandroid E/MediaPlayer: Error (1,-38)
03-14 13:52:06.168 477-24740/? E/NuPlayerDecoder: failed to flush OMX.google.h264.decoder (err=-38)
03-14 13:52:06.168 477-16531/? E/NuPlayer: received error(0xffffffda) from video decoder, flushing(2), now shutting down
03-14 13:52:06.169 10973-10989/com.hobbyte.touringandroid E/MediaPlayer: error (1, -38)
03-14 13:52:06.170 10973-10973/com.hobbyte.touringandroid E/MediaPlayer: Error (1,-38)

作为参考,这是我的类文件:

    package com.hobbyte.touringandroid.ui.adapter;

import android.content.Context;
import android.graphics.SurfaceTexture;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;

import com.google.android.exoplayer.ExoPlayer;
import com.google.android.exoplayer.FrameworkSampleSource;
import com.google.android.exoplayer.MediaCodecVideoTrackRenderer;
import com.google.android.exoplayer.SampleSource;
import com.google.android.exoplayer.TrackRenderer;
import com.hobbyte.touringandroid.App;
import com.hobbyte.touringandroid.tourdata.ListViewItem;
import com.hobbyte.touringandroid.internet.LoadImageFromURL;
import com.hobbyte.touringandroid.R;

import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Nikita
 */
public class PoiContentAdapter extends ArrayAdapter<ListViewItem> {
    private static final String TAG = "PoiContentAdapter";

    public static final int HEADER = 0;
    public static final int BODY = 1;
    public static final int IMAGE = 2;
    public static final int VIDEO = 3;

    private static Pattern namePattern;
    private static final String FILE_NAME_PATTERN = "https?:\\/\\/[-\\w\\.\\/]*\\/(.+\\.(jpe?g|png|mp4))";

    private ListViewItem[] items;

    private String keyID;

    private TextureView textureView;
    private MediaPlayer player;
    private AudioManager audio;

    private ImageButton play;
    private ImageButton replay;
    private ImageButton mute;
    private ImageButton max;
    private SeekBar volume;

    private String filePath;

    @Override
    public int getViewTypeCount() {
        return 4;
    }

    @Override
        public int getItemViewType(int position) {
        return items[position].getType();
    }

    public PoiContentAdapter(Context context, ListViewItem[] content, String keyID) {
        super(context, 0, content);
        this.keyID = keyID;
        items = content;
        namePattern = Pattern.compile(FILE_NAME_PATTERN);
    }

    /**
     * Inflates a certain view depending on the type of ListViewItem (Normal text or Image URL)
     * @param position Position of item in the ItemList
     * @param view View
     * @param parent ParentView
     * @return the view in question
     */
    @Override
    public View getView(int position, View view, ViewGroup parent) {
        ListViewItem listViewItem = items[position];
        int listViewItemType = getItemViewType(position);
        String filename = null;

        TextView contentView;

        if (listViewItem.getUrl() != null) {
            Matcher m = namePattern.matcher(listViewItem.getUrl());
            if (m.matches()) {
                filename = m.group(1);
            }
        }

        if (view == null) {
            if (listViewItemType == IMAGE) {
                view = LayoutInflater.from(getContext()).inflate(R.layout.poi_image, parent, false);
            } else if(listViewItemType == VIDEO) {
                view = LayoutInflater.from(getContext()).inflate(R.layout.poi_video, parent, false);
            } else {
                view = LayoutInflater.from(getContext()).inflate(R.layout.poi_content, parent, false);
            }
        }

        switch (listViewItemType) {
            case IMAGE:
                ImageView imageView = (ImageView) view.findViewById(R.id.poiContentImageView);
                TextView textView = (TextView) view.findViewById(R.id.poiContentImageDesc);
                textView.setText(listViewItem.getText());

                if (filename != null) {
                    new LoadImageFromURL(imageView, App.context).execute(filename, keyID); //Load image in a separate thread
                }
                return view;

            case VIDEO:
                filePath = getContext().getFilesDir() + "/" + String.format("%s/video/%s", keyID, filename);
                File file = new File(filePath);
                if(!file.exists()) {
                    view = LayoutInflater.from(getContext()).inflate(R.layout.poi_content, parent, false);
                    contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                    contentView.setText("This contains a video." + "\n" + "Download this tour with Media to see this Video!" + "\n");
                    contentView.setGravity(Gravity.CENTER_HORIZONTAL);
                } else {
                    System.out.println(filePath);
                    textureView = (TextureView) view.findViewById(R.id.poiContentVideoView);

                    DisplayMetrics metrics = App.context.getResources().getDisplayMetrics();
                    int height = metrics.heightPixels / 2;
                    int width = metrics.widthPixels;
                    textureView.setMinimumHeight(height);
                    textureView.setMinimumWidth(width);

                    play = (ImageButton) view.findViewById(R.id.playButton);
                    replay = (ImageButton) view.findViewById(R.id.replayButtoon);
                    mute = (ImageButton) view.findViewById(R.id.muteButton);
                    max = (ImageButton) view.findViewById(R.id.maxVolButton);
                    volume = (SeekBar) view.findViewById(R.id.volumeControl);
                    audio = (AudioManager) App.context.getSystemService(Context.AUDIO_SERVICE);

                    textureView.setSurfaceTextureListener(videoListener);
                    TextView videoDesc = (TextView) view.findViewById(R.id.poiContentVideoDesc);
                    videoDesc.setText(listViewItem.getText());
                }
                return view;
            case HEADER:
                // TODO
                if(view.findViewById(R.id.poiContentTextView) == null) {
                    view = LayoutInflater.from(getContext()).inflate(R.layout.poi_content, parent, false);
                }
                contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                contentView.setText(listViewItem.getText() + "\n");
                if(listViewItem.getText().length() == 0) {
                    return new View(getContext());
                }
                return view;
            case BODY:
                // TODO
                contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                contentView.setText(listViewItem.getText() + "\n");
                return view;
            default:
                contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                contentView.setText("Something went wrong\n");
                return view;
        }
    }

    private TextureView.SurfaceTextureListener videoListener = new TextureView.SurfaceTextureListener() {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
            Surface s = new Surface(surface);
            try {
                player = new MediaPlayer();
                player.setDataSource(filePath);
                player.setSurface(s);
                player.prepareAsync();
                player.setAudioStreamType(AudioManager.STREAM_MUSIC);
                player.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
                player.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                    @Override
                    public void onBufferingUpdate(MediaPlayer mp, int percent) {
                        //Do nothing
                    }
                });
                player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        //Do nothing
                    }
                });
                player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(final MediaPlayer mp) {
                        play.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if(mp.isPlaying()) {
                                    mp.pause();
                                    play.setImageResource(R.mipmap.ic_play_arrow_white_36dp);
                                } else {
                                    mp.start();
                                    play.setImageResource(R.mipmap.ic_pause_white_36dp);
                                }
                            }
                        });

                        replay.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if(mp.isPlaying()) {
                                    play.setImageResource(R.mipmap.ic_play_arrow_white_36dp);
                                    mp.pause();
                                    mp.seekTo(0);
                                } else {
                                    play.setImageResource(R.mipmap.ic_play_arrow_white_36dp);
                                    mp.seekTo(0);
                                }
                            }
                        });
                        mute.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                mp.setVolume(0.0f, 0.0f);
                                volume.setProgress(0);
                            }
                        });
                        max.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                mp.setVolume(1.0f, 1.0f);
                                volume.setProgress(audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
                            }
                        });

                        int maxVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                        int currVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
                        volume.setMax(maxVolume);
                        volume.setProgress(currVolume);
                        volume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                            @Override
                            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                                audio.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                            }

                            @Override
                            public void onStartTrackingTouch(SeekBar seekBar) {

                            }

                            @Override
                            public void onStopTrackingTouch(SeekBar seekBar) {

                            }
                        });
                    }
                });

                player.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                        //Do nothing
                    }
                });
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        @Override
        public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

        }

        @Override
        public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
            if (player != null) {
                player.stop();
                player.release();
                player = null;
            }
            return true;
        }

        @Override
        public void onSurfaceTextureUpdated(SurfaceTexture surface) {

        }
    };
}

我真的一点也不明白是什么导致了所有这些错误,为什么视频文件无法播放?如果有人能够提供帮助,我将不胜感激!

我正在使用 Genymotion 模拟器 - Google Nexus 4 - API 21

非常感谢!

4

1 回答 1

0

这是模拟器的问题。在 Android 手机上测试并运行良好,重置 Genymotion 模拟器并创建一个新的,它继续正常运行。

于 2016-03-15T09:14:26.387 回答