2016-12-19 6 views
-1

몇 시간 동안 솔루션을 찾고있었습니다. listview에 대한 사용자 정의 baseAdapter을 만들었습니다. 이미지가 제대로 작동합니다. imageView 일한 후에는 VideoView도 괜찮을 것이라고 생각했습니다. 그렇다면, 나는 그것 대신에 TextureViev을 사용해야한다는 것을 알았지 만, 그 논리는 분명했지만 결국에는 웹상에 아무런 해결책이없는 약간의 오류가있었습니다.Listview에서 비디오 재생

나는 Glide을 사용해 보았습니다. 효과가 없었고 다시 여기에 왔습니다.

mediaplayer 준비 중에 이러한 오류가 발생합니다.

E/ExtMediaPlayer-JNI : JNIMediaPlayerFactory : env-> IsInstanceOf는

E/MediaPlayer를-JNI 실패 bIsQCMediaPlayerPresent 0 매체 제조

;

W/MediaPlayer를 : 정보/경고 (3, 0)

때 시도 mediaplayer

시작시 [32 : 12-19 19 11.967 378 : 31,124 전자 /] avi 모드가 아닙니다.

계속 진행하려면 모든 영감이 필요합니다. 감사합니다.

mediaplayertextureview 방법을 구현하여 MainActivity 클래스의 내부 클래스에 baseAdapter을 정의했습니다.

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

내가 MediaPlayer를 싱글 톤 클래스를 만들 것이다, 그래서 당신이 한 번 이상 그를 더 실체화 할 필요가 없습니다, 확실하지 그게 문제입니다 만

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를 시도하고 작동하지 않았다. 아직도 무엇을 해야할지 모르겠다. –