2012-06-13 1 views
0
package z.x; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.RandomAccessFile; 
import android.app.Activity; 
import android.content.Context; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.MediaController; 
import android.widget.TextView; 
import android.widget.VideoView; 

public class AsdqweActivity extends Activity { 
    /** Called when the activity is first created. */ 
    VideoView myVideoView; 
    TextView translation; 
    String SrcPath = "/sdcard/bunny.MP4",txtdisplay=""; 
    Thread Thread1,Thread2; 
    Button tag; 
    int count=0,tstart=-1,tend=0; 
    AudioManager am; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     myVideoView = (VideoView) findViewById(R.id.newVideoView); 
     translation= (TextView) findViewById(R.id.translation); 
     MediaController mediaController = new MediaController(this); 
     mediaController.setAnchorView(myVideoView); 
     myVideoView.setMediaController(mediaController); 
     myVideoView.setKeepScreenOn(true); 
     Runnable runnable = new VideoPlayer(); 
     Thread2= new Thread(runnable); 
     Thread2.start(); 

     runnable = new CountDownRunner(); 
     Thread1= new Thread(runnable); 
     Thread1.start(); 

     runnable = new AudioPlayer(); 
     Thread1= new Thread(runnable); 
     Thread1.start(); 

     am = 

     tag = (Button) findViewById(R.id.start); 
     tag.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //how to change the text on the button???????? 
       if(count%2==0) 
       { 
        tstart=myVideoView.getCurrentPosition(); 
        System.out.println("tag starts here: "+ tstart); 
        myVideoView.pause(); 
        tend=tstart+1000; 
        count++; 
        if((tstart+1000)>myVideoView.getDuration()) 
        { 
         tend=myVideoView.getDuration(); 
         count++; 
        } 
       } 
       else 
       { 
        tend = myVideoView.getCurrentPosition(); 
        if(tend>=(tstart+1000)){ 
         System.out.println("tag ends here: "+ tend); 
         count++; 
         myVideoView.pause();  
        } 
        else 
        { 
         System.out.println("invalid tagging"); 
        } 
        tstart=-1; 
       } 
      } 
     }); 
     myVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
     { 
      public void onCompletion(MediaPlayer mp) 
      { 
      Log.v("log_tag", "On Completion"); 
      try { 
       Thread1.join(); 
       Thread2.join(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //r.stopThread(); 
      finish(); 
      } 
     }); 
    } 

    class VideoPlayer implements Runnable{ 

     public void run() 
     { 
      myVideoView.requestFocus(); 
      myVideoView.setVideoPath(SrcPath); 
      myVideoView.start(); 
     } 

    } 

    class AudioPlayer implements Runnable{ 

     public AudioPlayer() { 
      // TODO Auto-generated constructor stub 

     } 
     public void run() 
     { 
      /*myVideoView.setsetvolume(0,0); 
      audio.requestFocus(); 
      audio.setVideoPath(SrcPathaudio); 
      audio.start();*/ 
     } 

    } 

    class CountDownRunner implements Runnable 
    { 
     File file = new File("/sdcard/harsh.srt"); 
     long r=0; 
     RandomAccessFile rand; 
     public CountDownRunner() { 
      // TODO Auto-generated constructor stub 
      if(!file.exists()) 
      { 
       System.out.println("File does not exist."); 
       System.exit(0); 
      } 
      try { 
       rand = new RandomAccessFile(file,"r"); 
      } catch (FileNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      translation = (TextView)findViewById(R.id.translation); 

     } 
     public void run() 
     { 
      // Get the object of DataInputStream 
      while(!Thread.currentThread().isInterrupted()) 
      { 
       try 
       { 
        doWork(); 
        Thread.sleep(100); 
       }catch (InterruptedException e) 
       { 
        Thread.currentThread().interrupt(); 
        e.printStackTrace(); 
       }catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      closeRandFile(); 

     } 
     public void closeRandFile(){ 
      try { 
       rand.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     public void doWork(){ 
      runOnUiThread(new Runnable() { 
       public void run() { 
        try{ 
         rand.seek(r); 
         //If it returns milliseconds, divide by 1000 
         int playTime = myVideoView.getCurrentPosition(); 
         long t1=0,t2=0; 
         int i=0,j=0; 
         /* String textValue = "i havent entered it yet"; 
         System.out.println(playTime); 
         if(playTime<15000){ 
         textValue = "its still not 15000"; 
         System.out.println(textValue); 
         }else if(playTime>3000) 
         {textValue = "its more than 15000";}*/ 
         //////////////////////////////////// 
         try{ 
          // Open the file that is the first 
          // command line parameter 

          String strLine; 
          //Read File Line By Line 
          while(((strLine = rand.readLine()) != null)&&((strLine==""))) 
          { 
           System.out.println(strLine+" line 184"); 
          } 
          if(strLine != null) 
          { 
           i = Integer.parseInt(strLine); 
           System.out.println(strLine+" line 189"); 
           if(i>j){ 
            if((strLine = rand.readLine()) != null) 
            { 
             //02:03:24,100 --> 02:03:25,500 
             //String substring(int startIndex, int endIndex) 
             int h =Integer.parseInt(strLine.substring(0,2)); 
             int m =Integer.parseInt(strLine.substring(3,5)); 
             int s =Integer.parseInt(strLine.substring(6,8)); 
             int ms=Integer.parseInt(strLine.substring(9,12)); 
             t1 = (((((h*60)+m)*60)+s)*1000)+ms ; 
             System.out.println("start of this text time "+t1); 
             int l = strLine.indexOf("-->")+4; 
             h =Integer.parseInt(strLine.substring(l+0,l+2)); 
             m =Integer.parseInt(strLine.substring(l+3,l+5)); 
             s =Integer.parseInt(strLine.substring(l+6,l+8)); 
             ms=Integer.parseInt(strLine.substring(l+9,l+12)); 
             t2 = (((((h*60)+m)*60)+s)*1000)+ms ; 
             System.out.println("end of this text time "+t2); 
            } 
            if((playTime<=t2)&&(playTime>=t1)){ 
             while (((strLine = rand.readLine()) != null)&&(strLine!="")){ 
               // Print the content on the console 
                txtdisplay=txtdisplay+strLine;  
              } 
              System.out.println(txtdisplay); 
              r=rand.getFilePointer(); 
              translation.setText(txtdisplay); 
            } 
            txtdisplay=""; 
          } 
          } 
          //Close the input stream 

          }catch (Exception e){//Catch exception if any 
          System.err.println("Error: " + e.getMessage()); 
          } 
         ////////////////////////////////////// 
        }catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 

     } 
    } 
} 

이곳은 새로운 기능입니다. 같은 비디오가 재생되는 동안 내 교수가 다른 오디오를 재생하도록 요청 받았습니다 (예를 들어 영어를 이해하지 못하고 해당 앱이 프랑스어로 재생되기를 원합니다). 비디오보기를 사용했습니다. 한 가지 가능한 방법은 현재 오디오를 음소거하고 내 sdcard에 저장된 프랑스어 오디오를 재생하는 것입니다. 동영상보기는 뮤팅을 지원하지 않습니다 (하나를 찾을 수 없음). 동영상보기 대신 미디어 플레이어를 사용해야한다고 읽었습니다. 도와주세요 ... !! 나는 무엇을해야합니까? 미리 감사드립니다.오디오를 음소거하고 그 자리에서 다른 오디오를 재생하는 중 (VideoView)

+0

VideoView를 지켜 보면서이 MediaPlayer를 객체/서피스 뷰 SurfaceView 주변 단지 래퍼이지만, 약간의 검색 후 나는 setVolume 제어를 지원하지 않습니다 그것을 볼 수 있습니다 MediaPlayer 객체가 가지고있는 것 ... 그것은 구현 될 것이라고 생각할 수 있기 때문에 이상합니다. 어쩌면 당신은 일종의 CustomVideoView를 작성하고 거기에 setVolume 메소드를 구현할 수 있습니다. – Guardanis

+0

audioManager에 대해 어떻게 말합니까 ?? – nsp

+0

직접 사용하지 않았지만 다른 사람이 비슷한 것을 한 것처럼 보입니다. http://stackoverflow.com/a/3197282/1426565 – Guardanis

답변

3

MediaPlayer.OnPreparedListener 및 MediaPlayer.OnCompletionListener를 호출해야하는 VideoView의 MediaPlayer에 액세스하려면 setVolume (0f, 0f); 기능은이 작업을 수행합니다 0

에 볼륨을 설정합니다 :

@Override 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_video); 

    VideoView videoView = (VideoView)this.findViewById(R.id.VVSimpleVideo); 
    MediaController mc = new MediaController(this); 
    mc.setAnchorView(videoView); 
    mc.setMediaPlayer(videoView); 
    videoView.setMediaController(mc); 
    String _path = "/mnt/sdcard/Movies/video5.mp4"; 

    videoView.setVideoPath(_path); 
    videoView.setOnPreparedListener(PreparedListener); 

    videoView.requestFocus(); 

    //Dont start your video here 
    //videoView.start(); 


} 

MediaPlayer.OnPreparedListener PreparedListener = new MediaPlayer.OnPreparedListener(){ 

    @Override 
    public void onPrepared(MediaPlayer m) { 
     try { 
       if (m.isPlaying()) { 
        m.stop(); 
        m.release(); 
        m = new MediaPlayer(); 
       } 
       m.setVolume(0f, 0f); 
       m.setLooping(false); 
       m.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      }  
    } 
};