SORU
8 NİSAN 2012, Pazar


Android ICS * Arabellek Boyutu 4.0

Ve yuva yazmadan önce mp3 ses indirme şifresini ben de Media Player için bir proxy olarak bir yuva kullanıyorum. Bu tüm Android sürümü 2.1 - 4 için bunu kullanıyorum ancak örnek NPR news app gösterilen benzer atm.

NPR StreamProxy kod http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java

Benim sorunum oynatma 2.1 - 2.3, ama * ateş önce çok fazla veri arabellekleri Android 4.0 ICS onPrepared dinleyici için hızlı olmasıdır.

Veri onPrepared önce Yuva OutputStream için yazılmış örnek bir miktar():

~ 133920 bayt sonra . sgs2 var üzerinde 2.3.4 - onPrepared()

~ 961930 bayt sonra . Nexus 4.0.4 - onPrepared S()

Bu da Galaxy Nexus oluşur.

Tuhaf bir şekilde 4.0 öykünücüsü 4.0 cihazlar kadar veri tampon yok. Herkes ICS üzerinde * ile benzer bir sorunla karşılaşıyorsunuz?

EDİT

Proxy soket yazıyor. Bu örnekte bir CipherİnputStream bir dosyadan yüklenen, ama aynı HttpResponse yüklü olduğunda oluşur.

final Socket client = (setup above)

// encrypted file input stream
final CipherInputStream inputStream = getInputStream(file);

// setup the socket output stream
final OutputStream output =  client.getOutputStream();

// Writing the header
final String httpHeader = buildHttpHeader(file.length());
final byte[] buffer = httpHeader.getBytes("UTF-8");
output.write(buffer, 0, buffer.length);

int writtenBytes = 0;
int readBytes;
final byte[] buff = new byte[1024 * 12]; // 12 KB

while (mIsRunning && (readBytes = inputStream.read(buff)) != -1) {
    output.write(buff, 0, readBytes);
    writtenBytes  = readBytes;
}

output.flush();
output.close();

HTTP o ses.. önce * yazılan Başlıklar

private String buildHttpHeader(final int contentLength) {
    final StringBuilder sb = new StringBuilder();

    sb.append("HTTP/1.1 200 OK\r\n");
    sb.append("Content-Length: ").append(contentLength).append("\r\n");
    sb.append("Accept-Ranges: bytes\r\n" );
    sb.append("Content-Type: audio/mpeg\r\n");
    sb.append("Connection: close\r\n" );
    sb.append("\r\n");

    return sb.toString();
}

Baktım etrafta alternatif uygulamalar ama ben şifreli ses ve Media Player desteklemiyor İnputStreams olarak bir veri kaynağı benim tek seçenek (bence..) kullanmak için bir proxy gibi bu.

Yine, bu oldukça iyi 2.1 - 2.3 Android ama * oynamadan önce bu veri büyük miktarda tampon vardır ICS çalışıyor.

EDİT 2 :

Daha fazla test bu da sgs2 var bir sorun Android 4.0.3 için bir kez yükseltilmiş olduğunu gösteriyor. Bu * tamponlama uygulama önemli ölçüde 4.0 değişmiş gibi görünüyor. Bu API davranışı değiştirmek için bir yol sağlar gibi sinir bozucu.

EDİT 3 :

Android bug yarattı. Yorum ve yıldız orada da ekleyin lütfen http://code.google.com/p/android/issues/detail?id=29870

EDİT 4 :

Çalma benim kod başladım.. oldukça standarttır() benim onPrepared içinde * arama() yöntemi.

mCurrentPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mCurrentPlayer.setDataSource(url);
mCurrentPlayer.prepareAsync();

Bunu kullanarak sadece hazırlamak denedim() ve ayrıca ajacian81 önerilen yol ama boşuna.

Geçenlerde bir Google çalışanı bana sorumu geri aldım hakkında eklemek gerekir ve Tampon boyutunu bilerek ICS (HD içerik için) artış olduğunu doğruladı. API geliştiriciler için * on tampon boyutu ayarlama özelliği eklemek istiyor.

Bu API değişiklik isteği birlikte geldim önce de olmuştu ama sanırım nefesini tutmayı tavsiye etmem.

CEVAP
17 Mayıs 2012, PERŞEMBE


Başlangıç gittiğini kodunu görmek mümkün olacak)ıng*?

STREAM_MUSIC ses akışı türünü kullanıyorsunuz?

player.setAudioStreamType(AudioManager.STREAM_MUSIC);

Ayrıca oyuncu arasında tecrübe var.() prepareAsync; ve oyuncu.() hazırlamak;?

Çözüm için olduğu benzer bir sorun geçen sene hatırlıyorum, vardı: başlangıç, ve sonra başlamak için onPrepared pause():

player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
player.setDataSource(src); 
player.prepare(); 
player.start(); 
player.pause(); 
player.setOnPreparedListener(new OnPreparedListener() {     
@Override
                public void onPrepared(MediaPlayer mp) {
                    player.start();                
                }
          });

Bu durumda düzeltme, ama iplik yaparken olması muhtemel tekerlekleri bu denemeye değer olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrMimoB

    MrMimoB

    11 NİSAN 2011
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008