마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

미디어플레이어로는 swf를 재생할수 없는건가요?

0 추천
package com.CustomizeMedia;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
 
public class VodPlayer extends Activity 
implements  MediaPlayer.OnPreparedListener, SurfaceHolder.Callback
{
//동영상 주소
private String LINK2 = "sdcard/download/lee.flv";
private String          LINK1 = "sdcard/download/test33.swf"; //파일 주소
 
private MediaPlayer m_MediaPlayer;
private VodPlayerSurfaceView m_Surface;//
private SurfaceHolder m_SurfaceHolder;
 
 
 
@Override 
public void onCreate(Bundle icicle) //Activity 클래스를 확장하는 클래스는, 기본적으로 onCreate() 메소드를 오버라이드
{
super.onCreate(icicle); //슈퍼클래스의 메소드로 호출
setContentView(R.layout.video_player); //R.layout으로 화면전환
m_Surface = (VodPlayerSurfaceView)findViewById(R.id.surface); //view 를 여러개 사용하는 경우에는 onCreate 에서 findViewById 등을 이용해서
//일단 resource 에서 가져와서 application 내의 View 변수에 설정해주어야 한다.
m_SurfaceHolder = m_Surface.getHolder();       //surfaceholder를쓰는데 필요한 요소
m_SurfaceHolder.addCallback(this); //필요한요소2
 
Log.i("uu","onCreate");
}
 
//동영상 재생준비 완료
@Override 
public void onPrepared(MediaPlayer mediaplayer)
{
m_MediaPlayer.start();
Log.i("uu","onPrepared");
}
@Override 
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k){ //surface가 소멸될때호출
Log.i("uu","surfaceChanged");
}
@Override 
public void surfaceDestroyed(SurfaceHolder surfaceholder){         //surface가 처음생성될때호출
Log.i("uu","surfaceDestroyed");
}
 
//재생준비 완료
@Override 
public void surfaceCreated(SurfaceHolder holder) //surface에 구조적인 변화가있을때 호출
{ //surface를 사용하기위해 3개 오버라이드해야함
playVideo(LINK1);
}
 
private void playVideo(String url)
{
Log.i("uu","playVideo " +url);
try
{
if(m_MediaPlayer == null) //객체를 생성
{
m_MediaPlayer = new MediaPlayer();
//인덱스 추가 끝날때까지 계속 인덱스 돌린후 끝나면 다음재생
}
else //생성되어있으면 다시사용하기위해 리셋
{
m_MediaPlayer.stop();
m_MediaPlayer.reset();
}
m_MediaPlayer.setDataSource(url); //동영상주소 세팅
m_MediaPlayer.setDisplay(m_SurfaceHolder); //디스플레이 세팅
m_MediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //소리
m_MediaPlayer.setOnPreparedListener(this); //준비완료시Onprepared함수 호출
m_MediaPlayer.prepareAsync(); //재생준비완료시 위함수 호출
 
m_MediaPlayer.setOnCompletionListener(new OnCompletionListener() { //재생 완료시 자동호출
                public void onCompletion(MediaPlayer arg0) {
                Log.i("uu","onCompletion");
                playVideo(LINK2);
           }
            });
 
}
catch (Throwable t){
}
Log.i("uu","playVideo end");
 
 
}
 
}
 
/////////////////////////////////////////////////////////////////////////////////
package com.CustomizeMedia;
 
import android.content.Context;
import android.view.SurfaceView;
import android.util.AttributeSet;
 
public class VodPlayerSurfaceView extends SurfaceView {
public VodPlayerSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
/////////////////////////////////////////////////////////////////////////////////

오픈소스로 현재 플레이어 역할을 하기는 하는데,

여기서 문제가 flv파일은 재생이 되는데 swf파일을 재생할수가없습니다.

둘다 플래시파일로아는데 flv파일은 실행이되고 swf파일은 실행이 안되는 이유가 있는건가요?

여기서 swf파일을 실행하려면 어떻게 구현을해야될지,

아니면 아예 처음부터 미디어플레이어만으로는 swf파일의 재생이 불가능한지 궁금합니다.

Xior (210 포인트) 님이 2015년 3월 13일 질문

1개의 답변

0 추천
재생이 불가능하여 Webview를 이용한 편법으로 만든다고 하네요.
Djleeee (13,180 포인트) 님이 2015년 3월 14일 답변
늦어서 죄송합니다 ㅠㅠ
Webview에서 어떤 편법을 사용해서 swf파일의 재생을 가능하게 하는건가요?
로컬리소스를 로드해서 안드로이드 내에서 재생하는건가요?
...