2016-12-19 5 views
-1

Я искал решение часами. Я создал обычай baseAdapter для listview. Он отлично работает с изображениями. После того, как imageView работал, я думал, что VideoView будет хорошо. Затем я увидел, что мне пришлось использовать TextureViev вместо него, работал над ним, его логика была ясна, но в конце я получил некоторые ошибки без решения в Интернете.Воспроизведение видео в виде списка

Я пробовал использовать Glide, это не сработало, и я вернулся сюда снова.

В то время как mediaplayer готовится, я получаю эти ошибки;

Е/ExtMediaPlayer-JNI: env-> IsInstanceOf терпит неудачу

Е/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0

При получении средств массовой информации;

Вт/медиаплеера: Информация/предупреждение (3, 0)

При попытке запуска mediaplayer

[12-19, 19: 32: 11.967 378: 31124 E /] не в режиме avi

Мне нужно каждое небольшое вдохновение, чтобы продолжить работу, спасибо.

я определил baseAdapter в внутреннем классе в MainActivity классе с внедрением mediaplayer и textureview методов;

public class postAdapter extends BaseAdapter implements TextureView.SurfaceTextureListener, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnVideoSizeChangedListener { 
    ArrayList<Posts> posts; 
    public postAdapter(ArrayList<Posts> postsToList) 
    { 
     posts=postsToList; 
    } 
    MediaPlayer mMediaPlayer; 
    TextureView textureView; 
    VideoView animatedView; 

    @Override 
    public int getCount() { 
     // Log.d(TAG, "getCount: "+posts.size()); 
     return posts.size(); 

    } 

    public void addRangeToTop(ArrayList<Posts> newposts) 
    { 
     for (int i=0;i<newposts.size();i++) 
     { 
      posts.add(i,newposts.get(i)); 
     } 
    } 
    @Override 
    public Object getItem(int position) { 

     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View child = getLayoutInflater().inflate(R.layout.animatedpost, null); 
     TextView titleView = (TextView) child.findViewById(R.id.titleView); 
      ImageView imageView = (ImageView) child.findViewById(R.id.capsView); 
     animatedView=(VideoView) child.findViewById(R.id.animatedView); 
     textureView=(TextureView)child.findViewById(R.id.textureView); 
     TextView voteView = (TextView) child.findViewById(R.id.voteView); 
     Button button=(Button) child.findViewById(R.id.button2); 



     textureView.setSurfaceTextureListener(this); 














     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


      /* ArrayList<Posts> newp=new ArrayList<Posts>(); 
       for (int i=10;i<15;i++) 
       { 
        Posts post=new Posts(); 
        post.setPostTitle(i+"dsf"); 
        post.setPostVote(i+"sdfsd"); 
        newp.add(post); 

       } 
       int index = lv.getFirstVisiblePosition()+newp.size() ; 
       View v2 = lv.getChildAt(0); 
       int top = (v2 == null) ? 0 : v2.getTop(); 
       addRangeToTop(newp); 
       notifyDataSetChanged(); 
       lv.setSelectionFromTop(index, top);*/ 
       /* Uri uri = Uri.parse("http://somepath"); // missing 'http://' will cause crashed 
       Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
       startActivity(intent);*/ 

      } 
     }); 
     titleView.setText(posts.get(position).getPostTitle()); 
     voteView.setText(posts.get(position).getPostVote()); 
     // imageView.setImageResource(R.drawable.df); 



     return child; 
    } 


    @Override 
    public void onBufferingUpdate(MediaPlayer mp, int percent) { 

    } 

    @Override 
    public void onCompletion(MediaPlayer mp) { 

    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 

     Log.d(TAG, "onPrepared: "); 

      mp.start(); 

    } 

    @Override 
    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 

    } 

    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 
     mMediaPlayer=new MediaPlayer(); 
     Surface s = new Surface(surface); 


     try { 

      mMediaPlayer.setDataSource("http://somefunnyvideopath.mp4"); 
      mMediaPlayer.setSurface(s); 


      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer. setOnVideoSizeChangedListener(this); 



      mMediaPlayer.prepareAsync(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

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

    } 

    @Override 
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
     return false; 
    } 

    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture surface) { 

    } 
} 

ответ

0

Я бы медиаплеер одноэлементно класс, так что вам не придется создать экземпляр его больше, чем когда-то, не уверен, что это ваша проблема, но это лучше

public class MyMediaPlayer { 
    MediaPlayer mp; 
    private static volatile MyMediaPlayer instance = null; 
    private MyMediaPlayer() { } 
    public static MyMediaPlayer getInstance() { 
     if (instance == null) { 
      synchronized (MyMediaPlayer.class) { 
       if (instance == null) { 
        instance = new MyMediaPlayer();}}} 
     return instance; 
    }} 

также попробовать с mp4 из сырой ресурс или из вашей галереи, чтобы вы знали, что ваше устройство может его воспроизвести, а затем, когда оно работает, попытайтесь перейти на вашу ссылку,

надеюсь, что это поможет.

+0

Спасибо, но это не сработает. Также я попробовал то же и другое mp4 из ресурса и не работал. Все еще не знаю, что делать. –