0

Я разместил MediaPlayer внутри TextureView, который сам находится внутри ListView.MediaPlayer внутри TextureView не работает по назначению

Вчера MediaPlayer работал по назначению с помощью тестового клипа .mp4. Сегодня MediaPlayer пытается сделать какой-то FFmpeg Extractor, для которого я не смог найти какую-либо информацию.

Это трассировки стека:

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 Emulator - Google Nexus 4 - API 21

Большое спасибо!

+0

Иногда в настоящее время загружает, не делая, что весь FFmpeg Extraction, но при воспроизведении (Still ждет onPrepared) дает код ошибки: E/MediaPlayer: ошибка (1, -38) – Russiee

+0

Из бревен он выглядит как FFmpeg используется эмулятором для демультиплексирования и декодирования AAC. Серьезные жалобы, похоже, больше связаны с OMX.google.h264.decoder (программным AVC-видеодекодером). Вы пробовали это на физическом устройстве или просто эмуляторе? – fadden

+0

Казалось, проблема с эмулятором. Я проверил на стандартном телефоне Android и отлично работал, сбросил эмулятор и создал новый, затем он работал нормально. – Russiee

ответ

0

Это была проблема с эмулятором. Тестировался на Android-телефоне и отлично работал, сбросил эмулятор Genymotion и создал новый, и он начал функционировать как обычно.

Смежные вопросы