WebView-Sound mit Hilfe von MediaPlayer und Service abspielen

  • Antworten:10
Torben Wetter
  • Forum-Beiträge: 8

23.07.2017, 20:10:35 via Website

Hallo!

Ich habe mich in letzter Zeit etwas mit WebViews, Services und dem MediaPlayer auseinandergesetzt, da ich diese Dinge brauche, um bei meinem aktuellen Projekt weiterzukommen.

Bei diesem geht es darum, dass ich eine Musik-Streaming-Website mit Hilfe eines WebViews in die App einbinde und somit das Abspielen der Musik in der App möglich ist (Website hat eine mobile Version).

Allerdings, um zu meinem Problem zu kommen, stoppt die Musik, wenn aus der App herausgegangen wird (Homebutton, Lockscreen, ...), was ja auch logisch ist.

Nun habe ich mich ein wenig informiert und sehe keine andere Möglichkeit, als den Sound über einen Service abzuspielen, was heißt, dass dieser von den UI-Elementen (WebView) getrennt werden muss.
Hinbekommen habe ich es, eine lokale (bzw. eine sich online befindende) Datei mit dem MediaPlayer abzuspielen und dies in einem Service, also im Hintergrund (auch wenn die App nicht offen ist).

Meine Frage:
Wie bekomme ich den kompletten Sound des WebViews (evtl. auch Lied-Skip-Sounds, etc. -> nicht nur die Lieder selbst) über einen MediaPlayer (?) in einen Service, welcher einfach nur diesen Sound wiedergibt? (Media Controls sind dabei kein Muss, wären aber auch hilfreich)

Ich hoffe, jemand hatte schon mal Erfahrung damit und kann mir bei meinem Problem helfen
Liebe Grüße Torben Wetter

Antworten
swa00
  • Forum-Beiträge: 3.704

23.07.2017, 20:37:16 via Website

Hallo Torben,

du kannst den Streaming Link dem Mediaplayer übergeben und diesen Async abspielen lassen.

Die StreamFunktion des Standard MediaPlayers ist allerdings sehr rudimentär und unstabil,
weshalb ich Dir eher zum ExoPlayer raten würde

http://google.github.io/ExoPlayer/

— geändert am 23.07.2017, 20:39:46

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Torben Wetter
  • Forum-Beiträge: 8

23.07.2017, 21:11:11 via Website

Hey,

so in der Art habe ich mir das auch schon mal gedacht.

Aber:
Auf der Seite (= automatisch auch in der App) gibt es Media Controls zum Starten, Stoppen, etc. und das würde doch gar nicht funktionieren, oder?
Noch schwieriger könnte es mit der "Timeline" werden, mit der man zu einem Punkt im Lied skippen kann..

Oder kann ich diese Informationen auch irgendwie bekommen bzw. dann an dem Media-/Exo-Player weitergeben?

Trotzdem schon mal vielen Dank für den Vorschlag, bin echt schon lange dran,
LG!

Antworten
swa00
  • Forum-Beiträge: 3.704

23.07.2017, 21:22:34 via Website

Hallo Torben,

eine Timeline bekommst nur dann , wenn du vorher das File physisch speicherst.
Ansonsten musst du Dir einen Thread bauen , der den ICY-Header aus dem Stream parst.

Das ist allerdings ein wenig aufwendig

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Torben Wetter
  • Forum-Beiträge: 8

23.07.2017, 21:47:10 via Website

Hey,

Stimmt, das klingt logisch.

Nur weiß ich eben nicht, wie ich Events wie Start, Stop oder Skip abfangen kann.
Ist dafür dieser ICY-Header? Habe davon leider noch nichts gehört.

LG

Antworten
swa00
  • Forum-Beiträge: 3.704

23.07.2017, 22:49:08 via Website

Hallo Torben ,

Nur weiß ich eben nicht, wie ich Events wie Start, Stop oder Skip abfangen kann.

Meinst du das allgemein - auch bei einem Local file ?
Oder nur bei einem Stream ?

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Torben Wetter
  • Forum-Beiträge: 8

23.07.2017, 22:51:51 via Website

Hey,

Was ich meine sind die Events der Website.
Wenn der User auf der Website Pause drückt, muss ich das abfangen und dann auch den MediaPlayer-Stream pausieren.
Wenn ... im Lied zu anderen Stellen skippt, muss ich ... zur richtigen Stelle gehen.

Verstehst du mich? (silly)

Antworten
swa00
  • Forum-Beiträge: 3.704

23.07.2017, 23:06:46 via Website

Ich habe dich schon verstanden.

Das geht aber nicht so , wie du das möchtest :

Wenn du den Stream-Link hast und damit deinen Player startest, ist dies dann ein eigenständiger
Process und hat nichts mehr mit der Web/ oder WebView zu tun.

Deine Knöpfe musst du dann auf Dein Layout in der App plazieren und damit den MediaPlayer steuern

Ich glaube du verwechselst ein Media Web-Plugin mit dem MediaPlayer , den Du in der App implementert hast.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Torben Wetter
  • Forum-Beiträge: 8

23.07.2017, 23:10:03 via Website

Achso okay, dann verstehen wir uns! :)

Ich muss das aber irgendwie verbinden.
Gibt es nicht noch andere Möglichkeiten außer eigenen Knöpfen? Theoretisch könnte ich doch bei Click-Events die Position auf dem Bildschirm abfragen und wenn unten (wo die Control-Buttons sind) geklickt wurde, dementsprechend den lokalen Stream beeinflussen, oder?
Hättest du noch eine Idee? Vielleicht von der Website übermitteln lassen? Mit denen arbeite ich nämlich zusammen.

LG

Antworten
swa00
  • Forum-Beiträge: 3.704

23.07.2017, 23:15:39 via Website

Das ist eher eine Javascript Sache, die eigentlich nichts mit App Programmierung und einem MediaPlayer zu tun hat .

JavaScripts ansich kannst du in einem WebView implementieren.
Du müsstest Dich also eher in dieser Richtung schlau machen.
https://github.com/scottagarman/Android-JavaScript-Interface-Example

— geändert am 23.07.2017, 23:17:32

Liebe Grüße - Stefan
[ App - Entwicklung ]

Torben Wetter

Antworten
Torben Wetter
  • Forum-Beiträge: 8

23.07.2017, 23:23:36 via Website

Okay, dann mache ich das mal.

Trotzdem vielen Dank! :)

LG

Antworten