2016-10-28 8 views
1

Я пытаюсь воспроизвести видео в видеоизображении и хочу показать канал прямой камеры с устройства в фоновом режиме. Но проблема заключается в том, что Surface view накладывает видеоизображение, скрывающее его полностью и видео не воспроизводятся должным образом в видеообъявлении, а звучат в одиночку. Может ли кто-нибудь помочь мне с этим, пожалуйста?Видео не воспроизводится в режиме просмотра видео - Surface View

активность код XML:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
<SurfaceView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/surfaceView"/> 
    <ProgressBar 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="match_parent" 
     android:layout_height="20dp" 
     android:background="@drawable/seekbar_video" 
     android:id="@+id/progressBar" /> 

    <ImageButton 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="20dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#00000000" 
     android:layout_marginTop="20dp" 
     android:src="@drawable/ic_close_3x" 
     android:textSize="18dp" 
     android:textAllCaps="false" 
     android:layout_below="@+id/progressBar" 
     android:drawableLeft="@drawable/ic_back_3x" 
     android:id="@+id/close" 
     /> 
    <ImageButton 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#00000000" 
     android:layout_marginTop="20dp" 
     android:src="@drawable/ic_right_3x" 
     android:layout_below="@+id/progressBar" 
     android:textSize="18dp" 
     android:layout_marginRight="20dp" 
     android:textAllCaps="false" 
     android:id="@+id/next" 
     android:visibility="invisible" 
     /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="RECORD" 
     android:layout_marginTop="100dp" 
     android:textColor="#ffffff" 
     android:gravity="center" 
     android:layout_centerHorizontal="true" 
     android:textSize="25dp" 
     /> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:background="#ffffff" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:layout_marginTop="140dp" 
     android:id="@+id/linearLayout"> 
     <VideoView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/memix_video" 
      /> 

    </LinearLayout> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#00000000" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="50dp" 
     android:id="@+id/camera" 
     android:src="@drawable/ic_frontcamera_3x" 
     android:layout_marginBottom="40dp" 
     /> 

    <ImageButton 
     android:id="@+id/record" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/circle_bg" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="20dp" 
     android:src="@drawable/ic_video" 
     /> 
    <ImageButton 
     android:id="@+id/record_large" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:background="@drawable/circle_bg" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="20dp" 
     android:src="@drawable/ic_video" 
     android:visibility="invisible" 
     /> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#00000000" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="50dp" 
     android:src="@drawable/ic_undo_3x" 
     android:id="@+id/undo" 
     android:layout_marginBottom="40dp" 
     /> 
</RelativeLayout> 
</FrameLayout> 

Java Файл:

import android.Manifest; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.media.MediaRecorder; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AlertDialog; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.SurfaceHolder; 
import android.view.SurfaceHolder.Callback; 
import android.view.SurfaceView; 
import android.hardware.Camera.Parameters; 
import android.media.MediaPlayer; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 
import android.widget.VideoView; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

public class MemixActivity extends AppCompatActivity implements Callback{ 
    VideoView videoView; 
    private static final int MY_PERMISSIONS_REQUEST_ACCOUNTS = 1; 
    File appDir = new File(Environment.getExternalStorageDirectory()+File.separator+"Memecry/temp"); 
    String filepath=appDir.getAbsolutePath()+"/trim.mp4"; 

    private SurfaceView mPreview; 
    private Camera mCamera; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_memix); 
     Log.e("file",filepath); 
     videoView=(VideoView)findViewById(R.id.memix_video) ; 
     mPreview=(SurfaceView)findViewById(R.id.surfaceView); 


     videoView.setVideoPath("/storage/emulated/0/Memecry/temp/trim.mp4"); 
       videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mp.setLooping(true); 
       mp.start(); 
       int duration=mp.getDuration(); 
       Log.e("dur", String.valueOf(duration)); 
      } 
     }); 
     mPreview = (SurfaceView)findViewById(R.id.surfaceView); 


     if(checkAndRequestPermissions()) { 
      Log.e("camera","Camera Started"); 

      mPreview.getHolder().addCallback(this); 
      mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

      mCamera = Camera.open(); 

     } 
    } 





    private boolean checkAndRequestPermissions() { 
     int permissionCAMERA = ContextCompat.checkSelfPermission(this, 
       Manifest.permission.CAMERA); 


     int storagePermission = ContextCompat.checkSelfPermission(this, 


       Manifest.permission.RECORD_AUDIO); 



     List<String> listPermissionsNeeded = new ArrayList<>(); 
     if (storagePermission != PackageManager.PERMISSION_GRANTED) { 
      listPermissionsNeeded.add(Manifest.permission.RECORD_AUDIO); 
     } 
     if (permissionCAMERA != PackageManager.PERMISSION_GRANTED) { 
      listPermissionsNeeded.add(Manifest.permission.CAMERA); 
     } 
     if (!listPermissionsNeeded.isEmpty()) { 
      ActivityCompat.requestPermissions(this, 


        listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), MY_PERMISSIONS_REQUEST_ACCOUNTS); 
      return false; 
     } 

     return true; 
    } 



    @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_ACCOUNTS: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        //Permission Granted Successfully. Write working code here. 
        mPreview.getHolder().addCallback(this); 
        mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

        mCamera = Camera.open(); 



       } else { 
        //You did not accept the request can not use the functionality. 
        checkAndRequestPermissions(); 
       } 
       break; 
     } 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     try { 
      mCamera.setPreviewDisplay(mPreview.getHolder()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 


    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     Camera.Parameters params = mCamera.getParameters(); 
     List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
     Camera.Size selected = sizes.get(0); 
     params.setPreviewSize(selected.width,selected.height); 
     mCamera.setParameters(params); 

     mCamera.startPreview(); 

    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     Log.i("PREVIEW","surfaceDestroyed"); 
    } 
} 
+0

где поверхность вид в вас xml? Я не вижу –

+0

Можете ли вы показать снимок экрана во время воспроизведения видео? –

ответ

1

Я сделал это, добавив setZOrderOnTop(true) для videoview, чтобы привести его фронт и он прекрасно работает.