在 android 的视频视图中播放视频时不录制语音

Posted

技术标签:

【中文标题】在 android 的视频视图中播放视频时不录制语音【英文标题】:Voice does not record when playing video in video view in android 【发布时间】:2017-07-25 14:14:03 【问题描述】:

我正在开发一个应用程序,我想在单击按钮时开始录制语音,同时还想开始在视频视图中播放视频。 现在该应用程序可以在 android 4.2 和 android 5.1 上运行,但不能在 android 7.0 等最新设备上运行。 这是代码

public class MainActivity extends Activity 

    Button start,stop,play;
Boolean recording=false;
String press_value="exit";



private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";
    boolean let_start_recording=true;

    ImageView startIV,profileIV;

    boolean recording_is_in_progress=false;
    VideoView vv ;
    MediaPlayer mPlayer;
    RelativeLayout mainRel;

    ///new media player
    String AudiosavePathInDevice = null;
      MediaRecorder mediaRecorder ;
      Random random ;
      String RandomAudioFileName = "ABCDEFGHIJKLMNOP";
      public static final int RequestPermissionCode = 1;
      MediaPlayer mediaPlayer ;




@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    startIV=(ImageView)findViewById(R.id.imageView1);
    profileIV=(ImageView)findViewById(R.id.imageView3);

    vv = (VideoView)findViewById(R.id.your_video_view);
    mainRel=(RelativeLayout)findViewById(R.id.main_rel);


    recording_is_in_progress=false;
    StopAnimation();

    profileIV.setOnClickListener(new OnClickListener()
    
      public void onClick(View v) 
      
        if(let_start_recording)
            
                let_start_recording=false;
                startIV.setImageResource(R.drawable.recorder_stop_circle);
                startRecording();
                recording_is_in_progress=true;
                StartAnimation();

            
            else
            
                let_start_recording=true;
                startIV.setImageResource(R.drawable.recorder_start_circle);
                stopRecording();
                recording_is_in_progress=false;

                StopAnimation();//Stop Animation once we press button

            
        

    );

    //START & STOP  Recording
    startIV.setOnClickListener(new OnClickListener()
    
      public void onClick(View v) 
      
        if(let_start_recording)
            
                let_start_recording=false;
                startIV.setImageResource(R.drawable.recorder_stop_circle);
                startRecording();
                recording_is_in_progress=true;
                StartAnimation();

            
            else
            
                let_start_recording=true;
                startIV.setImageResource(R.drawable.recorder_start_circle);
                stopRecording();
                recording_is_in_progress=false;

                StopAnimation();//Stop Animation once we press button

            
        

    );



    //EOF Oncreate


//((((   START ANIMATION ))))
public void StartAnimation()


//  vv.setVisibility(View.VISIBLE);
    startIV.setVisibility(View.VISIBLE);
    mainRel.setVisibility(View.VISIBLE);
    profileIV.setVisibility(View.GONE);

       //Video Loop
    vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        public void onCompletion(MediaPlayer mp) 
            vv.start(); //need to make transition seamless.
        
    );

 //   Uri uri = Uri.parse(R.drawable.sheep_video);
    Uri uri= Uri.parse("android.resource://com.pac.myapp/raw/sheep_video");

    vv.setVideoURI(uri);
    vv.requestFocus();    
    vv.start();

    vv.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.sheep_video));


    vv.setOnPreparedListener(new OnPreparedListener() 
    
        @Override
        public void onPrepared(MediaPlayer mp) 
        
            mp.setLooping(true);
          ///  showtoast("video compelted");
        
    );



public void StopAnimation()

    if(vv.isPlaying())
        vv.stopPlayback();

    //vv.setVisibility(View.INVISIBLE);
    startIV.setVisibility(View.GONE);
    mainRel.setVisibility(View.INVISIBLE);
    profileIV.setVisibility(View.VISIBLE);




private String getFilename()

    String filepath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(filepath, AUDIO_RECORDER_FOLDER);

    if (!file.exists()) 
    
        file.mkdirs();
    


    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String filename = dateFormat.format(new Date());
    filename="Voice "+filename+".wav";

    return (file.getAbsolutePath() + File.separator + filename);
    //return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".wav");


private void startRecording() 


     AudioSavePathInDevice =  getFilename();
          //   Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + 
            //    CreateRandomAudioFileName(5) + "AudioRecording.3gp";

          MediaRecorderReady();

          try 
             mediaRecorder.prepare();
             mediaRecorder.start();
           catch (IllegalStateException e) 
             // TODO Auto-generated catch block
             e.printStackTrace();
           catch (IOException e) 
             // TODO Auto-generated catch block
             e.printStackTrace();
          



private void stopRecording() 

     mediaRecorder.stop();



   public void MediaRecorderReady()
      mediaRecorder=new MediaRecorder();
      mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
      mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
      mediaRecorder.setOutputFile(AudioSavePathInDevice);
   


public void onBackPressed()

    if(recording_is_in_progress=true)
    
        //if(recorder!=null)
         //stopRecording();
        finish();
    

public void home(View v)
 
//Intent i=new Intent(v.getContext(),MainActivity.class);
//startActivity(i);
//finish();

  
  public void voice_list(View v)
    
   if(recording_is_in_progress==false)
   
   Intent i=new Intent(v.getContext(),SavedVoiceList.class);
   startActivity(i);
   finish();


 
  public void about_us(View v)
  
//showtoast("status = "+recording_is_in_progress);

if(recording_is_in_progress==false)

   Intent i=new Intent(v.getContext(),AboutUsActivity.class);
   startActivity(i);
   finish();
 

 public void showtoast(String str)
 
    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
    
  //EOF Activit

【问题讨论】:

【参考方案1】:

您可能必须请求android.permission.RECORD_AUDIO 权限才能在 Android 6 版本之后进行录制。

请查看the document

【讨论】:

以上是关于在 android 的视频视图中播放视频时不录制语音的主要内容,如果未能解决你的问题,请参考以下文章

视频仅在第一次尝试时不录制音频

在 Android 中录制、保存和播放视频

在 Android 中使用 GPU 进行视频录制和播放

Android:同时录制视频和播放 mp3?

将 SwiftUI View 录制到视频和播放中

使用表面视图android录制视频