2010-02-02 11 views
7

Tôi đã thử một số ví dụ khác nhau nhưng tôi không thể hiển thị bất kỳ video nào. Tôi nghe thấy âm thanh nhưng không có video. Tôi nghĩ có lẽ tôi đã có một định dạng video không chính xác vì vậy tôi đã tải về một thương mại fiat ở định dạng 3gp và vẫn không có niềm vui. Tôi đang sử dụng Eclipse Java EE với sdk android và ứng dụng của tôi nhắm mục tiêu 1.5 sdk (Api Level 3) mà không cần google api. Ai đó có thể xin vui lòng gửi một liên kết đến một video được biết đến để chơi trong Android hoặc chỉ ra vấn đề của tôi với mã. Tôi đã thử tất cả tôi có thể nghĩ ra .. có/không có chuẩn bị .. bố trí khác nhau, vvvideo android, nghe âm thanh nhưng không có video

Dưới đây là onCreate của tôi trong hoạt động

/** 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(); 
    } 

cô là bố trí trong 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> 

> Blockquote

+0

Tôi đã có vấn đề này cũng như sử dụng một VideoView nhưng nếu tôi yêu cầu tập trung sau khi video bắt đầu sau đó nó hoạt động ok. – draksia

Trả lời

1

Nếu bạn đang sử dụng trình mô phỏng, nó có thể không hoạt động. Trình giả lập thiếu khả năng tăng tốc phần cứng khả dụng trong các thiết bị Android. Ví dụ, trên Core 2 Duo 2.6GHz, đôi khi tôi có thể phát video để phát lại nhưng không phải lúc nào cũng vậy. Trên máy chậm hơn, phát lại video không bao giờ hoạt động. Trên một 2.5GHz Core 2 Quad, tôi luôn nhận được phát lại video. Điều đó đang được nói, tôi thường thử nghiệm phát lại video trên các thiết bị thực tế.

Tôi cũng không chắc chắn liệu phát lại video có hoạt động từ tài nguyên thô hay không. Tôi thực sự khuyên bạn nên thử sử dụng video từ một tệp trên thẻ SD trước tiên.

Đối với video chắc chắn hoạt động, tôi biết rằng "Phim tài liệu và bạn" và "Âm nhạc dành cho cháu của chúng tôi" từ here hoạt động ở dạng MP4 của chúng.

+0

Tôi đang sử dụng bộ đôi 2 lõi 3.0 ghz. Tôi không chắc chắn lý do tại sao nhưng tôi tìm thấy một sameple trên diễn đàn này mà làm việc bằng cách sử dụng VideoView. Cảm ơn câu trả lời .. Tôi không biết nó là CPU phụ thuộc đây là liên kết đến những gì đã làm việc cho tôi http://stackoverflow.com/questions/2167608/android-not-playing-video-mp4 – slytron

+0

Câu trả lời này là đơn giản là không đúng sự thật. Phát lại video trong trường hợp của anh ấy không hoạt động vì anh ấy không khởi tạo lại cuộc gọi trên SurfaceHolder ... nó không liên quan gì đến trình giả lập hoặc tốc độ máy tính. Xem câu trả lời ở phía dưới cùng với mã để khởi tạo thích hợp SurfaceHolder. – kape123

1

Bạn có thể lấy một ví dụ đầy đủ bằng cách nhìn vào ứng dụng mẫu Android ApiDemo (nhìn vào ví dụ dưới 'Media'): liên kết http://developer.android.com/resources/samples/ApiDemos/index.html

Đối với một bộ phim mẫu để sử dụng với bản demo, tôi đã sử dụng Trang web trên thiết bị di động của YouTube thành công.

0

Tôi đã gặp phải sự cố tương tự. Tôi đã có thể khắc phục nó bằng cách thay đổi SurfaceView thành VideoView trong tệp bố cục XML. Giữ tất cả các phần còn lại của mã giống nhau. Điều đó làm việc cho tôi, không biết tại sao.

17

Lớp học của bạn phải triển khai SurfaceHolder.Callback và gọi phương thức setDisplay, prepare and etc chỉ sau khi bạn nhận được trong surfaceCreated. Ngoài ra, bạn có thể cần thay đổi loại chủ sở hữu bề mặt thành SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS. Như thế này:

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) { 
    } 

} 

// ... 
} 

Nếu bạn thử nó trong OnCreate bạn có gì kết quả, bởi vì bề mặt chưa được tạo ra ...

+0

Yêu bạn rất nhiều. Bạn cứu mạng tôi! Tôi đã thêm một chút chỉnh sửa cho câu trả lời của bạn – Aracem

+1

Cảm ơn bạn rất nhiều vì «SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS'! Đáng kinh ngạc! Xin chúc mừng huy hiệu vàng của bạn - nó rất xứng đáng! –

+0

Từ tài liệu chính thức: Hằng số này không được chấp nhận ở cấp API 11. điều này bị bỏ qua, giá trị này được đặt tự động khi cần. –

0

Đây là một vấn đề cũ nhưng câu trả lời của tôi có thể giúp đỡ một ai đó.

Để hỗ trợ các phiên bản cũ của Android, bạn cần phải thêm dòng này:

videoHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
0

Cho dù một file video nhất định sẽ chơi trong một cầu thủ được phụ thuộc vào ba điều: định dạng container

  • Video (loại tệp).
  • Bộ giải mã mã hóa video (và có khả năng âm thanh); hỗ trợ của người chơi của bạn cho kết hợp định dạng vùng chứa và codec
  • Hỗ trợ codec và trình phát/thiết bị cho nó gần như chắc chắn là nguyên nhân dẫn đến kết quả không nhất quán mà bạn đã thấy. (Một codec, nếu bạn không biết, về cơ bản là một công thức toán học lặp lại cho hệ thống của bạn biết cách biến bit và byte được đóng gói thành tệp thành hình ảnh chuyển động (và ngược lại),