# Stream not found for Apple HLS

**URL:** <https://community.wowza.com/t/stream-not-found-for-apple-hls/46697>\
**Category:** Wowza Streaming Engine\
**Created:** [April 18, 2016, 8:40am UTC](https://community.wowza.com/t/stream-not-found-for-apple-hls/46697 "2016-04-18T08:40:28Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tadas\_Zidonis](https://avatars.discourse-cdn.com/v4/letter/t/8baadc/32.png) [@Tadas\_Zidonis](https://community.wowza.com/u/Tadas_Zidonis)\
**Post date:** [April 18, 2016, 8:40am UTC](https://community.wowza.com/t/stream-not-found-for-apple-hls/46697/1 "2016-04-18T08:40:28Z")

</div>

Hello,

Some time ago i have implemented [Switching between live streams](http://community.wowza.com/t/-/46695)

Using lower-level API.

Basically live stream is created. Another incoming live stream and static video is switched (sort of overlay).

Everything was working until recently i saw logs full of following errors:

HTTPStreamerAdapterCupertinoStreamer.onPlaylist: Stream not found [live/smil:lrytas.smil/chunklist\_w866886594\_b864000\_slLT\_t64SEk=.m3u8]: lr\_hi\_NLT

Investigation led to this conclusion:

When live incomming stream reconnection happens and my switcher in playing live stream (is static video is shown nothing happens) apple HLS player (JWPlayer or [http://dailymotion.github.io/hls.js/demo/](http://dailymotion.github.io/hls.js/demo/)) stops playing.

Page reload returns 404. Server restart solves issue until next reconnect.

I suspect temporal live stream publish of ‘empty’ stream does this.

Wowza test players RTMP, HDS are working then.

Question what to do? Is this apple HLS issue, wowza, or my code?

this is actual switch method:

```auto
private void switchStreams(StreamData streamData, boolean showLive, boolean fileHasEnded) {
		if (streamData.provider != null)
			streamData.provider.close();
		streamData.provider = null;
		
		Publisher publisher = streamData.publisher;
		if (showLive) {
			String liveStream = streamData.config.liveStream;
			streamData.provider = new PublishingProviderLive(publisher, publisher.getMaxTimecode(), liveStream);
			streamData.provider.setRealTimeStartTime(System.currentTimeMillis());
			logUtil.info("Stream: " + streamData.name + " switching to live stream: " + liveStream);
		} else {
			String overlay = streamData.config.overlayFile;
			streamData.provider = new PublishingProviderMediaReader(publisher, publisher.getMaxTimecode(), overlay);
			streamData.provider.setRealTimeStartTime(System.currentTimeMillis());
			if (!fileHasEnded) {
				logUtil.info("Stream: " + streamData.name + " switching to overlay: " + overlay);				
			} else {
				logUtil.debug("Stream: " + streamData.name + " restarting overlay file");
			}
			
		}
	}

```

Stream data class:

```auto
private class StreamData {
		String name;
		boolean showLive;
		TranscoderDestinationConfig config;
		
		IPublishingProvider provider;
		Publisher publisher;
		
		public StreamData(String name, boolean showLive, IPublishingProvider provider, Publisher publisher,
				TranscoderDestinationConfig config) {
			
			this.name = name;
			this.showLive = showLive;
			this.config = config;
			this.provider = provider;
			this.publisher = publisher;
		}
		
		boolean play() {
			try {
				return provider.play(publisher);
			} catch (Exception e) {
				logUtil.error("Live playback exception happened: " + e.getMessage());
				return false;
			}
		}
	}

```

StreamData#play() is called elsewere

BTW.

```auto
provider.play(publisher)

```

Always return false playing a PublishingProviderLive. Why?
