2011-01-02 28 views
9

Tôi cần phải xác định xem một mediaplayer có đang sử dụng khung phương tiện truyền thông mở để tôi có thể vô hiệu hóa việc tìm kiếm luồng của mình hay không. Khung công tác mở có vẻ thất bại với việc tìm kiếm, điều mà tôi đang gặp khó khăn khi tin rằng họ được phép sản xuất, nhưng có vẻ như vậy.Xác định khung công tác mở hoặc stagefright cho mediaplayer?

Tôi muốn nó đơn giản như xác định phiên bản SDK của họ, nhưng điện thoại droid có api 8 dường như sử dụng opencore vẫn còn, do đó, không có vẻ là một lựa chọn tốt. Bất kỳ ý tưởng?

EDIT:

Sau khi trả lời từ Chúa Giêsu, tôi đã đưa ra mã này. Dường như nó hoạt động tốt trong các thử nghiệm của tôi. Nếu ai đó không nghĩ rằng đó là một phương pháp âm thanh để tìm kiếm luồng, hãy cho tôi biết

if (Build.VERSION.SDK_INT < 8) //2.1 or earlier, opencore only, no stream seeking 
     mStreamSeekable = false; 
    else { // 2.2, check to see if stagefright enabled 
     mStreamSeekable = false; 
     try { 
       FileInputStream buildIs = new FileInputStream(new File("/system/build.prop")); 
       if (CloudUtils.inputStreamToString(buildIs).contains("media.stagefright.enable-player=true")) 
        mStreamSeekable = true; 
      } catch (IOException e) { //problem finding build file 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

Xin chào, Làm cách nào để có lớp CloudUtils? –

+0

@AlexTran Điều này sẽ giúp http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string –

+0

Thực sự xin lỗi, tôi không có ý nghĩa gì với những gì tôi sẽ tìm thấy từ liên kết . –

Trả lời

6

Phương pháp đó không hoạt động trên Samsung Galaxy S, cho biết Stagefright được bật nhưng không sử dụng, ít nhất là không cho phát trực tuyến. Một kiểm tra an toàn hơn là mở một ổ cắm cục bộ và kết nối MediaPlayer với nó và xem nó báo cáo như tác nhân người dùng.

Ví dụ: đây là những gì tôi thấy trên Samsung Galaxy S và Trình mô phỏng 2.2;

Galaxy S: User-Agent: CORE/6.506.4.1 OpenCORE/2,02 (Linux; Android 2,2)

Emulator: User-Agent: stagefright/1.0 (Linux; Android 2.2)

Trong một chủ đề, hãy làm điều gì đó như thế này;

volatile int socketPort; 

    ServerSocket serverSocket = new ServerSocket(0); 
    socketPort = serverSocket.getLocalPort(); 

    Socket socket = serverSocket.accept(); 

    InputStream is = socket.getInputStream(); 

    byte [] temp = new byte [2048];  
    int bsize = -1; 
    while(bsize <= 0) { 
     bsize = is.read(temp); 
    } 
    String res = new String(temp, 0, bsize); 

    if(res.indexOf("User-Agent: stagefright") >= 0) { 
     // Found stagefright 
    } 

    socket.close(); 
    serverSocket.close(); 

Và như thế này trong một chủ đề khác (làm cho chặn chấp nhận() gọi trở lại trên);

MediaPlayer mp = new MediaPlayer(); 
    mp.setDataSource(String.format("http://127.0.0.1:%d/", socketPort)); 
    mp.prepare(); 
    mp.start(); 
+1

Bạn có thể hiển thị mã cho điều đó không? –

+1

tính năng này không hoạt động đối với tất cả các điện thoại ví dụ như điện thoại htc ** Tác nhân người dùng: Trình phát trực tuyến HTC [mã nhà điều hành]/1.0/htc_pyramid/2.3.3 ** không có ** stagefright ** được đề cập. – Samuel

1

Để nhận thông tin đó bạn có thể đọc tệp /system/build.prop của thiết bị. Trong tệp này có một tham số có tên là media.stagefright.enable-player. Nếu tham số đó được đặt thành true, thì stagefright sẽ hoạt động, nếu không thiết bị của bạn đang sử dụng opencore.

+0

Có vẻ đầy hứa hẹn, nhưng Log.i (TAG, "Stagefright Enabled:" + System.getProperty ("media.stagefright.enable-player")); // trả về null trên bất kỳ thiết bị nào tôi kiểm tra –

+0

Đó là sự thật, xin lỗi. Sau đó, bạn phải mở tệp build.prop và đọc tham số. –

1

Bạn có thể có thể phát hiện nếu stagefright được kích hoạt cho dòng bằng cách tìm kiếm

media.stagefright.enable-http=true 

thay vì

media.stagefright.enable-player=true 
2

Với Android 2.3.5, bây giờ media.stagefright. tài sản trình phát cho phép không tồn tại trong /system/build.prop

Các vấn đề liên quan