Я пытаюсь воспроизвести первое видео, полученное с внешней SD-карты, которая на моем T-Mobile G2 оказывается образцом видео для телефона. Теперь я предположил, что поскольку он воспроизводится в видеоплеере телефонов, у него не будет проблем с воспроизведением в VideoView в моем тестовом приложении.
Как неправильно ...
Все, что я получаю, это воспроизведение звука. Я уверен, что код все в порядке. Ведь все довольно просто.
Все, что я могу думать, это то, что, возможно, видеопроигрыватель телефонов использует некоторую встроенную функцию воспроизведения, которая поддерживает больше форматов видео?
Я также пытался воспроизвести mv4 (на самом деле файл MP4) и файл 3gp с этого сайта http://support.apple.com/kb/HT1425, но перенес их на SDCard эмулятора, но у обоих возникает одна и та же проблема. Аудио, но нет видео!
На самом деле, я где-то пропускаю разрешение?
Может ли кто-нибудь еще объяснить это поведение?
Код:
public class Video extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.video);
// Get the external storage state
String state = Environment.getExternalStorageState();
// Check if we can read it in
if (Environment.MEDIA_MOUNTED.equals(state)==false&&
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)==false)
{
// We can't read from the memory card, so warn and return;
Toast toast = Toast.makeText(this,
"The SD card is either missing or not in a readable state.", Toast.LENGTH_LONG);
toast.show();
return;
}
// Get a cursor to the video files
Cursor cc = this.getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
null, null, null, null);
// Get the video column index
int videoIDColumn = cc.getColumnIndex(MediaStore.Video.VideoColumns._ID);
// Iterate though the videos pointed to by the cursor
if (cc.moveToFirst())
{
int videoID = cc.getInt(videoIDColumn);
Uri videoPath = Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,String.valueOf(videoID));
// Log and add an image to the view
Log.i("Video Found",videoPath.toString());
VideoView videoView = (VideoView)findViewById(R.id.VideoTest);
videoView.setVideoURI(videoPath);
videoView.start();
}
else
{
Toast toast = Toast.makeText(this,
"Can't find a video to play.", Toast.LENGTH_LONG);
toast.show();
}
}
}
Спасибо заранее!
Andy
** Обновление
Я пытался использовать Android 1.5 и 1.6, и проблема все еще сохраняется.
Кроме того, только что проверил logcat, и я не получаю никаких ошибок для других файлов, но для .3gp я получаю эту ошибку ниже:
07-02 10:53:31.181: INFO/Video Found(235): content://media/external/video/media/2
07-02 10:53:31.383: VERBOSE/VideoView(235): reset duration to -1 in openVideo
07-02 10:53:31.541: INFO/ActivityManager(58): Displayed activity com.dvl.testing/.screens.Video: 533 ms (total 533 ms)
07-02 10:53:31.693: WARN/PlayerDriver(31): Using generic video MIO
07-02 10:53:31.883: ERROR/SW_DEC(31): PV SW DECODER is used for MPEG4
07-02 10:53:31.922: DEBUG/AudioSink(31): bufferCount (4) is too small and increased to 12
07-02 10:53:32.322: INFO/ARMAssembler(58): generated scanline__00000077:03010104_00000004_00000000 [ 22 ipp] (41 ins) at [0x2166f8:0x21679c] in 3379159 ns
Имеет смысл для кого-нибудь?