Я сохраняю видео, test.mp4
, в каталоге res/raw
моего проекта. У меня SurfaceView
объявлено так:
<SurfaceView android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</SurfaceView>
Затем, в методе onCreate ()
моей деятельности, у меня есть следующее:
private MediaPlayer mp;
private SurfaceView view;
private SurfaceHolder holder;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (SurfaceView) findViewById (R.id.surface);
holder = view.getHolder();
holder.setKeepScreenOn (true);
mp = MediaPlayer.create(this.getBaseContext (), R.raw.test);
mp.setDisplay (holder);
mp.setLooping (true);
mp.start();
}
Я не понимаю, почему он не показывает видео, даже если я установил дисплей. Я использую API 7 (2.1.1) и получаю аудио. Мне нужен интерфейс только для видео, без панели управления. Насколько я знаю, VideoView
, хотя и проще, чем MediaPlayer
, имеет встроенный уровень управления. Также я не вижу способа использовать VideoView
на ресурсе. Если для этих двух проблем есть обходные пути, или если мое предположение о VideoView
неверно, я был бы признателен, если бы мне сказали.
ОБНОВЛЕНИЕ: В настоящее время я использую класс VideoView
. Мое предположение действительно было неверным в отношении автоматического использования панели управления пользовательским интерфейсом. Тем не менее, я НЕ смог воспроизвести видео, хранящиеся в res/raw
, через класс MediaPlayer
; всегда происходит сбой, когда я звоню prepare ()
или воспроизводится звук, но видео - нет. Из-за этого мой вопрос все еще стоит.
Если кто-то столкнется с моим вопросом о том, как я использовал VideoView, позвольте мне избавить вас от некоторых хлопот, связанных с поиском видео в res/raw
. В следующем фрагменте предполагается, что у вас есть VideoView
с идентификатором view
в файле макета, main.xml
:
public class generalActivity extends Activity {
@Override
public void onCreate (Bundle icicle) {
super.onCreate (icicle);
this.setContent (R.layout.main);
// You know the that view is an instance of VideoView, so cast it as such
VideoView v = (VideoView) this.findViewById (R.id.view);
// This is the name of the video WITHOUT the file extension.
// In this example, the name of the video is 'test.mp4'
String videoName = "test"
// You build the URI to your video here
StringBuilder uriPathBuilder = new StringBuilder ();
uriPathBuilder.append ("android.resource://");
uriPathBuilder.append (this.getPackageName ());
uriPathBuilder.append (File.separator);
uriPathBuilder.append ("raw");
uriPathBuilder.append (File.separator);
uriPathBuilder.append (videoName);
Uri uri = Uri.parse (uriPathBuilder.toString ());
view.setVideoURI (uri);
view.start ();
}
}
Вот ссылка, которую я использовал в качестве ссылки для получения пути uri: ссылка
Я оставляю это открытым, потому что я спросил, могу ли я воспроизводить видео в res/raw
с помощью MediaPlayer, а не VideoView
. Даже если бы я заставил его работать так, как я хотел, используя VideoView
, насколько я знаю, есть еще вещи, которые MediaPlayer
может сделать, которые VideoView
не может. Хотя я могу ошибаться, поэтому, если вам просто нужно показать видео и не нужно ничего продвинутого, я почти уверен, что VideoView
будет достаточно.
О, и спасибо @Ravi за помощь.