#python #python-3.x #kivy #kivy-language #buildozer
Вопрос:
У меня было приложение для музыкального плеера, созданное с помощью kivy и ffpyplayer в качестве поставщика звука. Перед развертыванием программы на Android я просто хотел провести некоторое тестирование.
Казалось, все было в порядке, за исключением основной вещи, которая должна была работать, а именно воспроизведения аудиофайлов.
Все отлично работает на рабочем столе, но при развертывании на Android по какой-то причине kivy не может воспроизводить аудиофайлы и всегда возвращается:
[WARNING] [Audio ] Unable to find a loader for </data/data/org.test.audiotest/files/app/music/10_poker_face.mp3>
Кто — то сказал, что это может быть связано с тем, что ffpyplayer является оболочкой для ffmpeg, и у меня может не быть установленного ffmpeg, но, насколько мне известно, когда я передал ffpyplayer в качестве требования, он был обнаружен как рецепт и установил версию ffmpeg с собой.
Есть ли какая-то конкретная модификация, которую необходимо внести в файл buildozer.spec, которую я еще не сделал?
Вывод Logcat:
10-04 20:02:39.199 30572 31073 I python : Android kivy bootstrap done. __name__ is __main__
10-04 20:02:39.199 30572 31073 I python : AND: Ran string
10-04 20:02:39.199 30572 31073 I python : Run user program, change dir and execute entrypoint
10-04 20:02:39.384 30572 31073 I python : [WARNING] [Config ] Older configuration version detected (0 instead of 21)
10-04 20:02:39.384 30572 31073 I python : [WARNING] [Config ] Upgrading configuration in progress.
10-04 20:02:39.391 30572 31073 I python : [INFO ] [Logger ] Record log in /data/user/0/org.test.audiotest/files/app/.kivy/logs/kivy_21-10-04_0.txt
10-04 20:02:39.392 30572 31073 I python : [INFO ] [Kivy ] v2.0.0
10-04 20:02:39.392 30572 31073 I python : [INFO ] [Kivy ] Installed at "/data/user/0/org.test.audiotest/files/app/_python_bundle/site-packages/kivy/__init__.pyc"
10-04 20:02:39.392 30572 31073 I python : [INFO ] [Python ] v3.8.9 (default, Oct 4 2021, 19:42:43)
10-04 20:02:39.392 30572 31073 I python : [Clang 8.0.2 (https://android.googlesource.com/toolchain/clang 40173bab62ec7462
10-04 20:02:39.392 30572 31073 I python : [INFO ] [Python ] Interpreter at ""
10-04 20:02:39.398 30572 31073 I python : [INFO ] [Factory ] 186 symbols loaded
10-04 20:02:40.832 30572 31073 I python : [INFO ] [SoundFFPy ] Using ffpyplayer 4.3.2
10-04 20:02:40.833 30572 31073 I python : [INFO ] [Audio ] Providers: audio_ffpyplayer (audio_android, audio_sdl2 ignored)
10-04 20:02:40.873 30572 31073 I python : [INFO ] [ImageLoaderFFPy] Using ffpyplayer 4.3.2
10-04 20:02:40.873 30572 31073 I python : [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_ffpyplayer (img_pil ignored)
10-04 20:02:40.897 30572 31073 I python : [WARNING] [Audio ] Unable to find a loader for </data/data/org.test.audiotest/files/app/music/10_poker_face.mp3>
10-04 20:02:40.907 30572 31073 I python : [INFO ] [Text ] Provider: sdl2
10-04 20:02:41.053 30572 31073 I python : [INFO ] [Window ] Provider: sdl2
10-04 20:02:41.078 30572 31073 I python : [INFO ] [GL ] Using the "OpenGL ES 2" graphics system
10-04 20:02:41.079 30572 31073 I python : [INFO ] [GL ] Backend used <sdl2>
10-04 20:02:41.079 30572 31073 I python : [INFO ] [GL ] OpenGL version <b'OpenGL ES 3.2 v1.r22p0-01rel0.44b5f76694af1b9bc2767a12e28349a5'>
10-04 20:02:41.080 30572 31073 I python : [INFO ] [GL ] OpenGL vendor <b'ARM'>
10-04 20:02:41.080 30572 31073 I python : [INFO ] [GL ] OpenGL renderer <b'Mali-T880'>
10-04 20:02:41.080 30572 31073 I python : [INFO ] [GL ] OpenGL parsed version: 3, 2
10-04 20:02:41.080 30572 31073 I python : [INFO ] [GL ] Texture max size <8192>
10-04 20:02:41.080 30572 31073 I python : [INFO ] [GL ] Texture max units <16>
10-04 20:02:41.110 30572 31073 I python : [INFO ] [Window ] auto add sdl2 input provider
10-04 20:02:41.111 30572 31073 I python : [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
10-04 20:02:41.115 30572 31073 I python : [WARNING] [Base ] Unknown <android> provider
10-04 20:02:41.116 30572 31073 I python : [INFO ] [Base ] Start application main loop
10-04 20:02:41.118 30572 31073 I python : [INFO ] [GL ] NPOT texture support is available
10-04 20:03:06.259 30572 31073 I python : Couldn't play song, Song value: None
10-04 20:03:07.042 30572 31073 I python : Couldn't play song, Song value: None
10-04 20:03:07.547 30572 31073 I python : Couldn't play song, Song value: None
Мой основной файл python:
import os
# Ensure that the audio provider is `ffpyplayer` across all platforms
os.environ["KIVY_AUDIO"] = "ffpyplayer"
from kivy.lang import Builder
from kivy.core.audio import SoundLoader
from kivy.app import App
class MainApp(App):
def __init__(self, **kwargs):
super(MainApp, self).__init__(**kwargs)
self.song = SoundLoader.load("music/10_poker_face.mp3")
self.kv = Builder.load_string('''
#:kivy 2.0.0
Button:
text: "Play | Stop song!"
size_hint: (.7, .7)
pos_hint: {"center_x": .5, "center_y": .5}
on_release: app.play_song()
''')
def build(self):
return self.kv
def play_song(self):
if self.song:
if self.song.state == "play":
self.song.stop()
else:
self.song.play()
else:
print("Couldn't play song, Song value:", self.song)
if __name__ == '__main__':
MainApp().run()
The lines I have changed in the buildozer.spec file:
# (str) Title of your application
title = AudioTest
# (str) Package name
package.name = audiotest
# (str) Package domain (needed for android/ios packaging)
package.domain = org.test
# (str) Source code where the main.py live
source.dir = .
# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas,mp3
# (list) List of inclusions using pattern matching
source.include_patterns = music/10_poker_face.mp3,
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==2.0.0,ffpyplayer
# (str) Android logcat filters to use
android.logcat_filters = *:S python:D
Весь мой файл buildozer.spec: buildozer.spec