Android-видео, слышать звук, но нет видео - PullRequest
7 голосов
/ 02 февраля 2010

Я пробовал несколько разных примеров, но не могу показать ни одного видео. Я слышу звук, но нет видео. Я подумал, что, возможно, у меня просто неправильный формат видео, поэтому я скачал рекламный ролик в формате 3gp, но все равно не испытывал радости. Я использую Eclipse Java EE с Android SDK, и мое приложение нацелено на 1,5 SDK (Api Level 3) без Google API. Может ли кто-нибудь опубликовать ссылку на видео, известное по воспроизведению в Android, или указать мою проблему с кодом. Я перепробовал все, что мог придумать ... с / без подготовки .. разные макеты и т. Д.

Вот мой onCreate в деятельности

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

this.setContentView(R.layout.video_test);
    SurfaceView v = (SurfaceView) findViewById(R.id.surface_video); 
    SurfaceHolder holder = v.getHolder(); 
 // Set the transparency 
    //getWindow().setFormat(PixelFormat.UNKNOWN); 


    // Set a size for the video screen 
    //holder.addCallback(this); 
    holder.setFixedSize(400,300); 


    MediaPlayer mp = MediaPlayer.create(this, R.raw.fiat); 
    mp.setDisplay(holder);
    //mp.setAudioStreamType(2); 
    try {
        //mp.prepare();
        mp.start();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

ее макет в video_test.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<SurfaceView android:id="@+id/surface_video" 
android:layout_width="250px" 
android:layout_height="250px"> 
</SurfaceView> 
<LinearLayout 
android:orientation="horizontal" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:padding="10dip" 
> 
</LinearLayout> 
</LinearLayout> 

> Цитата

Ответы [ 6 ]

17 голосов
/ 04 апреля 2012

Вы должны реализовать класс SurfaceHolder.Callback и вызывать методы setDisplay, prepare и т. Д. Только после того, как попадете в SurfaceCreated. Также вам может потребоваться изменить тип держателя поверхности на SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS. Как это:

import android.view.SurfaceHolder.Callback;

public class TestActivity extends Activity implements Callback {

// ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ...
        mSurfaceView = (SurfaceView)findViewById(R.id.yousurfaceview); 
        holder = mSurfaceView.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mp.setDisplay(holder);
        mp.setDataSource(somesource);
        mp.prepare();
        mp.start();
        // etc...
    } catch (IOException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalStateException e) {
    }

}

// ...
}

Если вы попробуете это в OnCreate, вы ничего не получите в результате, потому что Surface еще не создан ...

1 голос
/ 11 августа 2010

Вы можете получить полный пример, посмотрев пример приложения Android ApiDemo (см. Пример в разделе «Медиа»): http://developer.android.com/resources/samples/ApiDemos/index.html

Что касается примера фильма для демонстрации, я успешно использовал ссылки на мобильный сайт YouTube.

1 голос
/ 02 февраля 2010

Если вы используете эмулятор, он может не работать.Эмулятору не хватает аппаратного ускорения, доступного в устройствах Android.Например, на Core 2 Duo с частотой 2,6 ГГц я иногда могу воспроизвести видео, но не всегда.На более медленных компьютерах воспроизведение видео никогда не работает.На 2,5 ГГц Core 2 Quad у меня всегда воспроизводится видео.При этом я обычно проверяю воспроизведение видео на реальных устройствах.

Я также не уверен, работает ли воспроизведение видео из необработанных ресурсов.Я настоятельно рекомендую вам сначала попробовать использовать видео из файла на SD-карте.

Что касается видео, которое действительно работает, я знаю, что "Документальные фильмы и вы" и "Музыка для наших внуков" из здесь работают в своих формах MP4.

0 голосов
/ 15 сентября 2015

Будет ли данный видеофайл воспроизводиться в данном плеере, зависит от трех вещей:

  • Формат видео контейнера (тип файла).
  • Кодек кодирования потоков видео (и, возможно, аудио); поддержка вашим плеером этой комбинации формата контейнера и кодека
  • Поддержка кодека и проигрывателя / устройства почти наверняка является причиной противоречивых результатов, которые вы видели. (Кодек, если вы не знали, это в основном повторяемая математическая формула, которая говорит вашей системе, как преобразовывать биты и байты, упакованные в файл, в движущиеся изображения (и обратно, если на то пошло))
0 голосов
/ 13 октября 2014

Это старая проблема, но мой ответ может кому-то помочь.

Для поддержки старых версий Android необходимо добавить следующую строку:

videoHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
0 голосов
/ 14 сентября 2011

Я столкнулся с той же проблемой. Мне удалось это исправить, изменив SurfaceView на VideoView в файле макета XML. Сохраняйте весь остальной код таким же. Это сработало для меня, не знаю почему.

...