Widget Playstream stop statt pause

Begonnen von paul79, 21 Januar 2018, 15:48:22

Vorheriges Thema - Nächstes Thema

paul79

Hallo,
ich bin gerade dabei mir einen Wecker zu bauen und da ist mir aufgefallen das Widget Playstream pause beim Beenden macht und nicht stop.
Dieses hat den Effekt, wenn ich die TabletUI nicht neu starte, dass ich die Nachrichten von gestern höre.

Mache ich etwas falsch oder kann man da etwas ändern?

<div data-type="playstream"
     data-get="Radio_HR3:STATE"
     data-url="Radio_HR3:url" 
     class="hide">
</div>

<div data-type="switch"
     data-device="Radio_HR3"
     data-icon="mi-radio"
     class="cell inline">
</div>


Gruß Paul
FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

setstate

es gibt leider kein Stop, nur Pause für HTML5 Audio-Streams.
Aber ein Workaround per audio.currentTime = 0; soll es geben.

Habe es mal eingebaut. Kannste ja mal testen. Update ist oben.

paul79

Hallo,

bringt leider nichts bzw. ist schlimmer jetzt ist es nicht pause sondern er spielt immer von vorn wieder alles ab.

Gruß Paul
FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

IchEben

Hey,
das Thema ist zwar schon etwas älter, aber ich habe eine Lösung für das Stopp Problem gefunden:
Laut dieser StackOverflow Antwort:
https://stackoverflow.com/questions/27258169/how-can-i-stop-and-resume-a-live-audio-stream-in-html5-instead-of-just-pausing-i
Kann man einen Stream Stoppen, indem man einen leeren src lädt.

Ich habe in widget_playstream.js folgendes geändert:
    function stopStream(elem) {
        var audio = elem.data('audio');
        audio.pause();
        //audio.currentTime = 0;
        setTimeout(function () {
            //This stops the stream from downloading
            audio.src = "";
            audio.load();
        });
        var elemFgIcon = elem.children().children('#fg');
        elemFgIcon.removeClass();
        elemFgIcon.addClass('fa fa-stack-1x');
        elemFgIcon.addClass(elem.data('icon'));
    }


und

    function toggleOn(elem) {

        //stop all streams
        me.elements.each(function (index, el) {
            $(this).data('audio').pause();
            setTimeout(function () {
                //This stops the stream from downloading
                $(this).data('audio').src = "";
                $(this).data('audio').load();
            });
        });


Nun funktioniert das Ganze viel besser und man bekommt auch nicht mehr die Radionachrichten vom Vortag zu hören, sondern das buffern des Streams wird gestoppt und neu gestartet bei stopp und start. Außerdem wird so nicht so viel Internet Traffic verbraten.

setstate

danke für die Tipps. Habe es so ähnlich übernommen