2011-04-07 19 views
14

n00b burada (ilk Android projesi). Android ürün yazılımı ile entegre edilmiş özel bir video kod çözücüsüne sahibim. MediaPlayerInterface öğesinden devraldığı bir sınıfı içeren bir .so dosyası ve özel codec sınıfının örneklerini uygun dosya türleri için create() fabrika işlevinden döndürmek üzere özel bir MediaPlayerService uygulamasıdır.Android'de özel bir kodek oynatmak için özel bir ortam yürütücüsü nasıl oluşturabilirim?

Bu codec'i, .so dosyasını libs/armeabi klasörüne yerleştirip JNI aracılığıyla çağırarak, ürün yazılımındaki kodek içermeyen telefonlara yüklenebilen bir video oynatıcı uygulamasının parçası olarak kullanmak istiyorum.

this question cevabından bunu MediaPlayer çerçevesinde yapmanın mümkün olmadığını anlıyorum ve sıfırdan yeni bir medya oynatıcı oluşturmak zorundayım. Başlangıç ​​olarak, Java'da bir kullanıcı arayüzünü uyguladıktan sonra, SurfaceView'u genişleten ve videoları oynatmak için MediaPlayer sınıfının bir örneğini kullanan özel bir görünüm (VideoView yerine) kullanmak üzere ayarladım. Daha sonra bu özel MediaPlayer örneğini özel bir medya oynatıcı Java sınıfıyla değiştirdim. JNI arayüzünü kurdum, android_media_MediaPlayer.cpp yolunu taklit ediyor ve JNI kodunda MediaPlayer C++ sınıfını çağırıyorum. Şimdi, 'u özel C++ medya oynatıcı sınıfı ile değiştirmem gerekiyor.

Sorun yaşamaya başladığım yer burası. Özel bir oyuncuyu uygulamak için önerilen yaklaşım nedir? Biri var mı Bu şeylerden herhangi biri için, kaynakta trolün yanı sıra bazı çevrimiçi belgeler var mı? Çerçevenin ne kadarını kullanabilirim ve kendimi ne kadar yeniden kullanmam gerekir? MediaPlayerService'ye kendi eşimi uygulamak zorunda mıyım?

Herhangi bir ipucu büyük beğeni topladı.

cevap

3

Android'in Java'daki MediaPlayer arabirimini nasıl uyguladığı hakkında fikir edinmek için Android'in kaynak kodunu inceleyebilirsiniz. Benzer satırları takip edebilirsiniz.

MediaPlayer Class Reference

+3

Cevabınız için teşekkür ederiz. İlk soruyu yayınlamadan önce MediaPlayer arayüzü için Android kaynak kodunu okudum. Benzer çizgiler takip etmek mümkün görünmüyor. Özellikle, yerleşik MediaPlayer yerleşik olmayan uygulamalara reddedilen ACCESS_SURFACE_FLINGER iznini kullanır. Kullanıcıların player'ımı indirip yüklemelerini, telefona önceden yüklememiş olmalarını istiyorum. – samgak

+0

Merhaba, android için özel codec'in nasıl uygulanacağına ilişkin son bulgularınızı paylaşın. @samgak – HoseinIT

2

Ben senin codec'i de CPU kullanımı yoğun değil umuyoruz. Android'in yalnızca H.264'ü desteklemesinin ana nedeni (sanırım), çoğu cihazda bu kodek için donanım desteği olduğunu sanırım. Diğer kodeklerin, muhtemelen yeterince güçlü olmayan CPU tarafından işlenmesi gerekecektir.

2

Neden bunun yerine VLC kullanmıyorsunuz? kaynak kodunu alabilirsiniz, her formatı destekler. Amacınız için düzeltin, cildiniz, cildiniz, cildiniz. Aslında şu anda kodda hacklediklerini biliyorum, atlayabilir ve onlara yardım edebilirsin.

http://gigaom.com/video/vlc-for-android-demo-beta/

+3

VLC, GPLv2 lisansı altında yayınlanmaktadır. Kodu kendi ticari projelerinizde kullanamazsınız. – philipp