Android

Android VideoView 예제

Ms_Tony 2016. 4. 5. 11:51

안드로이드 동영상 재생을 할 수 있는 VideoView 예제를 만들어보겠습니다.


자세한 코드 설명은 주석을 통해 달아놨습니다.


예제이기 때문에 MainActivity와 activity_main.xml 두개로 동작하기 때문에


확인하기 편하실 것 같습니다.

activity_main.xml 입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.project9.videoviewexample.MainActivity">

<VideoView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_gravity="center"/>

<Button
android:id="@+id/btnStart"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="시작"
android:onClick="StartButton"/>

<Button
android:id="@+id/btnStop"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="정지"
android:onClick="StopButton"/>

</LinearLayout>


미디어 컨트롤러를 세팅 할 예정이기 때문에 굳이 시작과 정지버튼을 만들 필요는 없었지만,


VideoView를 동작하게 하는 메소드를 사용해보기 위해 한번 추가해보았습니다.


다음으로 MainActivity.java입니다.


package com.project9.videoviewexample;

import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

public final static String VIDEO_URL = "http://sites.google.com/site/ubiaccessmobile/sample_video.mp4";
public final static int URL = 1;
public final static int SDCARD = 2;
VideoView videoView;
Button btnStart, btnStop;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 영상을 출력하기 위한 비디오뷰
* SurfaceView를 상속받아 만든 클래스
* 웬만하면 VideoView는 그때 그때 생성해서 추가 후 사용
* 화면 전환 시 여러 UI가 있을 때 화면에 제일 먼저 그려져서 보기에 좋지 않을 때가 있다
* 예제에서 xml에 추가해서 해봄
*/
//레이아웃 위젯 findViewById
videoView = (VideoView) findViewById(R.id.view);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);

//미디어컨트롤러 추가하는 부분
MediaController controller = new MediaController(MainActivity.this);
videoView.setMediaController(controller);

//비디오뷰 포커스를 요청함
videoView.requestFocus();

int type = URL;
switch (type) {
case URL:
//동영상 경로가 URL일 경우
videoView.setVideoURI(Uri.parse(VIDEO_URL));
break;

case SDCARD:
//동영상 경로가 SDCARD일 경우
String path = Environment.getExternalStorageDirectory()
+ "/TestVideo.mp4";
videoView.setVideoPath(path);
break;
}


//동영상이 재생준비가 완료되었을 때를 알 수 있는 리스너 (실제 웹에서 영상을 다운받아 출력할 때 많이 사용됨)
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Toast.makeText(MainActivity.this,
"동영상이 준비되었습니다. \n'시작' 버튼을 누르세요", Toast.LENGTH_SHORT).show();
}
});

//동영상 재생이 완료된 걸 알 수 있는 리스너
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//동영상 재생이 완료된 후 호출되는 메소드
Toast.makeText(MainActivity.this,
"동영상 재생이 완료되었습니다.", Toast.LENGTH_SHORT).show();
}
});

}
//시작 버튼 onClick Method
public void StartButton(View v) {
playVideo();
}

//정지 버튼 onClick Method
public void StopButton(View v) {
stopVideo();
}

//동영상 재생 Method
private void playVideo() {
//비디오를 처음부터 재생할 때 0으로 시작(파라메터 sec)
videoView.seekTo(0);
videoView.start();
}

//동영상 정지 Method
private void stopVideo() {
//비디오 재생 잠시 멈춤
videoView.pause();
//비디오 재생 완전 멈춤
// videoView.stopPlayback();
//videoView를 null로 반환 시 동영상의 반복 재생이 불가능
// videoView = null;
}
}


이 코드를 작성 할 때 유의할 점은, 미디어컨트롤러를 추가 할 때 


android.widget.MediaController를 import 하는지 명확하게 확인할 필요가 있습니다.


android.session.MediaController도 있기 때문에 이것을 import할 경우엔


원하는 결과대로 나오지 않을 수 있습니다.


또한 MediaController의 파라메터인 Context도 꼭 사용할 Activity의 Context를 입력해 주시길 바랍니다.


마지막으로 지금 예제 코드에서 인터넷 Url로 동영상을 재생하고 있기 때문에 


manifests에서 INTERNET 퍼미션을 추가하면 코드가 완성됩니다!


<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.project9.videoviewexample"
xmlns:android="http://schemas.android.com/apk/res/android">


<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>

</manifest>


끝으로 실행 화면과 프로젝트 파일 올리고 마무리하겠습니다.



VideoViewExample.zip

출처 : http://ilililililililililili.blogspot.kr/2013/07/android-video.html


'Android' 카테고리의 다른 글

Android ViewPagerStrip 예제  (2) 2016.04.05
Android EditText 아이폰 X버튼 만들기  (0) 2016.04.04
ProgressDialog 만들기 예제  (0) 2016.03.31
TouchEvent 사용법  (0) 2016.03.31
Android 데이터베이스 사용법  (2) 2016.03.29