@@ -4,7 +4,7 @@ import * as React from 'react'
44import { WebView } from 'react-native'
55import type { PlayState , HtmlAudioError } from './types'
66
7- const kstoStream = 'https://cdn.stobcm.com/radio/ksto1.stream/master.m3u8 '
7+ const kstoEmbed = 'https://www.stolaf.edu/multimedia/play/embed/ksto.html '
88
99type Props = {
1010 playState : PlayState ,
@@ -99,92 +99,98 @@ export class StreamPlayer extends React.PureComponent<Props> {
9999
100100 setRef = ( ref : WebView ) => ( this . _webview = ref )
101101
102- html = ( url : string ) => `
103- <style>body {background-color: white;}</style>
104-
105- <title>KSTO Stream</title>
106-
107- <audio id="player" webkit-playsinline playsinline>
108- <source src="${ url } " />
109- </audio>
102+ js = `
103+ function ready(fn) {
104+ if (document.readyState !== 'loading') {
105+ fn();
106+ } else if (document.addEventListener) {
107+ document.addEventListener('DOMContentLoaded', fn);
108+ } else {
109+ document.attachEvent('onreadystatechange', function () {
110+ if (document.readyState !== 'loading') {
111+ fn();
112+ }
113+ });
114+ }
115+ };
110116
111- <script>
112- var player = document.getElementById('player')
117+ ready(function () {
118+ var player = document.querySelector('audio');
113119
114- /////
115- //// /
120+ /*******
121+ ******* /
116122
117- document.addEventListener('message', function(event) {
123+ document.addEventListener('message', function (event) {
118124 switch (event.data) {
119125 case 'play':
120- player.play()
121- break
126+ player.muted = false;
127+ player.play().catch(error);
128+ break;
122129
123130 case 'pause':
124- player.pause()
125- break
131+ player.pause();
132+ break;
126133 }
127- })
134+ });
128135
129- /////
130- //// /
136+ /*******
137+ ******* /
131138
132139 function message(data) {
133- window.postMessage(JSON.stringify(data))
140+ window.postMessage(JSON.stringify(data));
134141 }
135142
136143 function send(event) {
137- message({type: event.type})
144+ message({type: event.type});
138145 }
139146
140147 function error(event) {
141148 message({
142149 type: event.type,
143- error: {
144- code: event.target.error.code,
145- message: event.target.error.message,
146- },
147- })
150+ error: 'error',
151+ });
148152 }
149153
150- /////
151- //// /
154+ /*******
155+ ******* /
152156
153- // "waiting" is fired when playback has stopped because of a temporary
154- // lack of data.
155- player.addEventListener('waiting', send)
157+ /* "waiting" is fired when playback has stopped because of a temporary
158+ * lack of data. */
159+ player.addEventListener('waiting', send);
156160
157- // "ended" is fired when playback or streaming has stopped because the
158- // end of the media was reached or because no further data is
159- // available.
160- player.addEventListener('ended', send)
161+ /* "ended" is fired when playback or streaming has stopped because the
162+ * end of the media was reached or because no further data is
163+ * available. */
164+ player.addEventListener('ended', send);
161165
162- // "stalled" is fired when the user agent is trying to fetch media data,
163- // but data is unexpectedly not forthcoming.
164- player.addEventListener('stalled', send)
166+ /* "stalled" is fired when the user agent is trying to fetch media data,
167+ * but data is unexpectedly not forthcoming. */
168+ player.addEventListener('stalled', send);
165169
166- // "playing" is fired when playback is ready to start after having been
167- // paused or delayed due to lack of data.
168- player.addEventListener('playing', send)
170+ /* "playing" is fired when playback is ready to start after having been
171+ * paused or delayed due to lack of data. */
172+ player.addEventListener('playing', send);
169173
170- // "pause" is fired when playback has been paused.
171- player.addEventListener('pause', send)
174+ /* "pause" is fired when playback has been paused. */
175+ player.addEventListener('pause', send);
172176
173- // "play" is fired when playback has begun.
174- player.addEventListener('play', send)
177+ /* "play" is fired when playback has begun. */
178+ player.addEventListener('play', send);
175179
176- // "error" is fired when an error occurs.
177- player.addEventListener('error', error)
178- </script>`
180+ /* "error" is fired when an error occurs. */
181+ player.addEventListener('error', error);
182+ });
183+ `
179184
180185 render ( ) {
181186 return (
182187 < WebView
183188 ref = { this . setRef }
184189 allowsInlineMediaPlayback = { true }
190+ injectedJavaScript = { this . js }
185191 mediaPlaybackRequiresUserAction = { false }
186192 onMessage = { this . handleMessage }
187- source = { { html : this . html ( kstoStream ) } }
193+ source = { { uri : kstoEmbed } }
188194 style = { this . props . style }
189195 />
190196 )
0 commit comments