Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Rek
Visitor

[SOLVED] HLS Live playlist issue

Hi all, I am trying to stream a live playlist (HLS) to the Roku. It does play the video, but has a few issues. First, when the user seeks to the end of the video, it hangs trying to play (reaches the end of the playlist). I've tested the playlist using an iPad, and when the same thing occurs on iPad, it waits to receive a few new segments, then starts playing them as if there was no problem.

Similarly, if I start a live stream on the Roku, stop it, then restart it, it will begin playing at the beginning of the playlist again -- the iPad will begin playing where it was left off, not when it was started last.

Has anyone encountered issues like this before? Are there additional options on roVideoScreen to enable this type of behaviour? If not, is it possible to manually implement the same effect?

Forgot to include the playlist. For your consideration:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
/stream/segw.ts?21510&1
#EXTINF:10,
/stream/segw.ts?21510&2
#EXTINF:10,
/stream/segw.ts?21510&3
#EXTINF:10,
/stream/segw.ts?21510&4
#EXTINF:10,
/stream/segw.ts?21510&5
#EXTINF:10,
/stream/segw.ts?21510&6
#EXTINF:10,
/stream/segw.ts?21510&7
#EXTINF:10,
/stream/segw.ts?21510&8
#EXTINF:10,
/stream/segw.ts?21510&9
#EXTINF:10,
/stream/segw.ts?21510&10
#EXTINF:10,
/stream/segw.ts?21510&11
#EXTINF:10,
/stream/segw.ts?21510&12
#EXTINF:10,
/stream/segw.ts?21510&13
#EXTINF:10,
/stream/segw.ts?21510&14
#EXTINF:10,
/stream/segw.ts?21510&15
#EXTINF:10,
/stream/segw.ts?21510&16
#EXTINF:10,
/stream/segw.ts?21510&17
#EXTINF:10,
/stream/segw.ts?21510&18
#EXTINF:10,
/stream/segw.ts?21510&19
#EXTINF:10,
/stream/segw.ts?21510&20
#EXTINF:10,
/stream/segw.ts?21510&21
#EXTINF:10,
/stream/segw.ts?21510&22
#EXTINF:10,
/stream/segw.ts?21510&23
#EXTINF:10,
/stream/segw.ts?21510&24
#EXTINF:10,
/stream/segw.ts?21510&25
#EXTINF:10,
/stream/segw.ts?21510&26
#EXTINF:10,
/stream/segw.ts?21510&27
#EXTINF:10,
/stream/segw.ts?21510&28
#EXTINF:10,
/stream/segw.ts?21510&29
#EXTINF:10,
/stream/segw.ts?21510&30
#EXTINF:10,
/stream/segw.ts?21510&31
#EXTINF:10,
/stream/segw.ts?21510&32
#EXTINF:10,
/stream/segw.ts?21510&33
#EXTINF:10,
/stream/segw.ts?21510&34
#EXTINF:10,
/stream/segw.ts?21510&35
#EXTINF:10,
/stream/segw.ts?21510&36
#EXTINF:10,
/stream/segw.ts?21510&37
#EXTINF:10,
/stream/segw.ts?21510&38
#EXTINF:10,
/stream/segw.ts?21510&39
#EXTINF:10,
/stream/segw.ts?21510&40
#EXTINF:10,
/stream/segw.ts?21510&41
#EXTINF:10,
/stream/segw.ts?21510&42
#EXTINF:10,
/stream/segw.ts?21510&43
#EXTINF:10,
/stream/segw.ts?21510&44
#EXTINF:10,
/stream/segw.ts?21510&45
#EXTINF:10,
/stream/segw.ts?21510&46
#EXTINF:10,
/stream/segw.ts?21510&47
#EXTINF:10,
/stream/segw.ts?21510&48
#EXTINF:10,
/stream/segw.ts?21510&49
#EXTINF:10,
/stream/segw.ts?21510&50
#EXTINF:10,
/stream/segw.ts?21510&51
#EXTINF:10,
/stream/segw.ts?21510&52
#EXTINF:10,
/stream/segw.ts?21510&53
#EXTINF:10,
/stream/segw.ts?21510&54
#EXTINF:10,
/stream/segw.ts?21510&55
#EXTINF:10,
/stream/segw.ts?21510&56
#EXTINF:10,
/stream/segw.ts?21510&57
#EXTINF:10,
/stream/segw.ts?21510&58
#EXTINF:10,
/stream/segw.ts?21510&59
#EXTINF:10,
/stream/segw.ts?21510&60
#EXTINF:10,
/stream/segw.ts?21510&61
#EXTINF:10,
/stream/segw.ts?21510&62
#EXTINF:10,
/stream/segw.ts?21510&63
#EXTINF:10,
/stream/segw.ts?21510&64
#EXTINF:10,
/stream/segw.ts?21510&65
#EXTINF:10,
/stream/segw.ts?21510&66
#EXTINF:10,
/stream/segw.ts?21510&67
#EXTINF:10,
/stream/segw.ts?21510&68
#EXTINF:10,
/stream/segw.ts?21510&69
#EXTINF:10,
/stream/segw.ts?21510&70
#EXTINF:10,
/stream/segw.ts?21510&71
#EXTINF:10,
/stream/segw.ts?21510&72
#EXTINF:10,
/stream/segw.ts?21510&73
#EXTINF:10,
/stream/segw.ts?21510&74
#EXTINF:10,
/stream/segw.ts?21510&75
#EXTINF:10,
/stream/segw.ts?21510&76
#EXTINF:10,
/stream/segw.ts?21510&77
#EXTINF:10,
/stream/segw.ts?21510&78
#EXTINF:10,
/stream/segw.ts?21510&79
#EXTINF:10,
/stream/segw.ts?21510&80
#EXTINF:10,
/stream/segw.ts?21510&81
#EXTINF:10,
/stream/segw.ts?21510&82
#EXTINF:10,
/stream/segw.ts?21510&83
#EXTINF:10,
/stream/segw.ts?21510&84
#EXTINF:10,
/stream/segw.ts?21510&85
#EXTINF:10,
/stream/segw.ts?21510&86
#EXTINF:10,
/stream/segw.ts?21510&87
#EXTINF:10,
/stream/segw.ts?21510&88
#EXTINF:10,
/stream/segw.ts?21510&89
#EXTINF:10,
/stream/segw.ts?21510&90
#EXTINF:10,
/stream/segw.ts?21510&91
#EXTINF:10,
/stream/segw.ts?21510&92
#EXTINF:10,
/stream/segw.ts?21510&93
#EXTINF:10,
/stream/segw.ts?21510&94
#EXTINF:10,
/stream/segw.ts?21510&95
#EXTINF:10,
/stream/segw.ts?21510&96
#EXTINF:10,
/stream/segw.ts?21510&97
#EXTINF:10,
/stream/segw.ts?21510&98
#EXTINF:10,
/stream/segw.ts?21510&99
#EXTINF:10,
/stream/segw.ts?21510&100
#EXTINF:10,
/stream/segw.ts?21510&101
#EXTINF:10,
/stream/segw.ts?21510&102
#EXTINF:10,
/stream/segw.ts?21510&103
#EXTINF:10,
/stream/segw.ts?21510&104
#EXTINF:10,
/stream/segw.ts?21510&105
#EXTINF:10,
/stream/segw.ts?21510&106
#EXTINF:10,
/stream/segw.ts?21510&107
#EXTINF:10,
/stream/segw.ts?21510&108
#EXTINF:10,
/stream/segw.ts?21510&109
#EXTINF:10,
/stream/segw.ts?21510&110
#EXTINF:10,
/stream/segw.ts?21510&111
#EXTINF:10,
/stream/segw.ts?21510&112
#EXTINF:10,
/stream/segw.ts?21510&113
#EXTINF:10,
/stream/segw.ts?21510&114
#EXTINF:10,
/stream/segw.ts?21510&115
#EXTINF:10,
/stream/segw.ts?21510&116
#EXTINF:10,
/stream/segw.ts?21510&117
#EXTINF:10,
/stream/segw.ts?21510&118
#EXTINF:10,
/stream/segw.ts?21510&119
#EXTINF:10,
/stream/segw.ts?21510&120
#EXTINF:10,
/stream/segw.ts?21510&121
#EXTINF:10,
/stream/segw.ts?21510&122
#EXTINF:10,
/stream/segw.ts?21510&123
#EXTINF:10,
/stream/segw.ts?21510&124
#EXTINF:10,
/stream/segw.ts?21510&125
#EXTINF:10,
/stream/segw.ts?21510&126
#EXTINF:10,
/stream/segw.ts?21510&127
#EXTINF:10,
/stream/segw.ts?21510&128
#EXTINF:10,
/stream/segw.ts?21510&129
#EXTINF:10,
/stream/segw.ts?21510&130
#EXTINF:10,
/stream/segw.ts?21510&131
#EXTINF:10,
/stream/segw.ts?21510&132
#EXTINF:10,
/stream/segw.ts?21510&133
#EXTINF:10,
/stream/segw.ts?21510&134
#EXTINF:10,
/stream/segw.ts?21510&135
#EXTINF:10,
/stream/segw.ts?21510&136
#EXTINF:10,
/stream/segw.ts?21510&137
#EXTINF:10,
/stream/segw.ts?21510&138
#EXTINF:10,
/stream/segw.ts?21510&139
#EXTINF:10,
/stream/segw.ts?21510&140
#EXTINF:10,
/stream/segw.ts?21510&141
#EXTINF:10,
/stream/segw.ts?21510&142
#EXTINF:10,
/stream/segw.ts?21510&143
#EXTINF:10,
/stream/segw.ts?21510&144
#EXTINF:10,
/stream/segw.ts?21510&145
#EXTINF:10,
/stream/segw.ts?21510&146
#EXTINF:10,
/stream/segw.ts?21510&147
#EXTINF:10,
/stream/segw.ts?21510&148
#EXTINF:10,
/stream/segw.ts?21510&149
#EXTINF:10,
/stream/segw.ts?21510&150
#EXTINF:10,
/stream/segw.ts?21510&151
#EXTINF:10,
/stream/segw.ts?21510&152
#EXTINF:10,
/stream/segw.ts?21510&153
#EXTINF:10,
/stream/segw.ts?21510&154
#EXTINF:10,
/stream/segw.ts?21510&155
#EXTINF:10,
/stream/segw.ts?21510&156
#EXTINF:10,
/stream/segw.ts?21510&157
#EXTINF:10,
/stream/segw.ts?21510&158
#EXTINF:10,
/stream/segw.ts?21510&159
#EXTINF:10,
/stream/segw.ts?21510&160
#EXTINF:10,
/stream/segw.ts?21510&161
#EXTINF:10,
/stream/segw.ts?21510&162
#EXTINF:10,
/stream/segw.ts?21510&163
#EXTINF:10,
/stream/segw.ts?21510&164
#EXTINF:10,
/stream/segw.ts?21510&165
#EXTINF:10,
/stream/segw.ts?21510&166
#EXTINF:10,
/stream/segw.ts?21510&167
#EXTINF:10,
/stream/segw.ts?21510&168
#EXTINF:10,
/stream/segw.ts?21510&169
#EXTINF:10,
/stream/segw.ts?21510&170
#EXTINF:10,
/stream/segw.ts?21510&171
#EXTINF:10,
/stream/segw.ts?21510&172
#EXTINF:10,
/stream/segw.ts?21510&173
#EXTINF:10,
/stream/segw.ts?21510&174
#EXTINF:10,
/stream/segw.ts?21510&175
#EXTINF:10,
/stream/segw.ts?21510&176
#EXTINF:10,
/stream/segw.ts?21510&177
#EXTINF:10,
/stream/segw.ts?21510&178
#EXTINF:10,
/stream/segw.ts?21510&179
#EXTINF:10,
/stream/segw.ts?21510&180
#EXTINF:10,
/stream/segw.ts?21510&181
#EXTINF:10,
/stream/segw.ts?21510&182
#EXTINF:10,
/stream/segw.ts?21510&183
#EXTINF:10,
/stream/segw.ts?21510&184
#EXTINF:10,
/stream/segw.ts?21510&185
#EXTINF:10,
/stream/segw.ts?21510&186
#EXTINF:10,
/stream/segw.ts?21510&187
#EXTINF:10,
/stream/segw.ts?21510&188
#EXTINF:10,
/stream/segw.ts?21510&189
#EXTINF:10,
/stream/segw.ts?21510&190
#EXTINF:10,
/stream/segw.ts?21510&191
#EXTINF:10,
/stream/segw.ts?21510&192
#EXTINF:10,
/stream/segw.ts?21510&193
#EXTINF:10,
/stream/segw.ts?21510&194
#EXTINF:10,
/stream/segw.ts?21510&195
#EXTINF:10,
/stream/segw.ts?21510&196
#EXTINF:10,
/stream/segw.ts?21510&197
#EXTINF:10,
/stream/segw.ts?21510&198
#EXTINF:10,
/stream/segw.ts?21510&199
#EXTINF:10,
/stream/segw.ts?21510&200
#EXTINF:10,
/stream/segw.ts?21510&201
#EXTINF:10,
/stream/segw.ts?21510&202
#EXTINF:10,
/stream/segw.ts?21510&203
#EXTINF:10,
/stream/segw.ts?21510&204
#EXTINF:10,
/stream/segw.ts?21510&205
#EXTINF:10,
/stream/segw.ts?21510&206
#EXTINF:10,
/stream/segw.ts?21510&207
#EXTINF:10,
/stream/segw.ts?21510&208
#EXTINF:10,
/stream/segw.ts?21510&209
#EXTINF:10,
/stream/segw.ts?21510&210
#EXTINF:10,
/stream/segw.ts?21510&211
#EXTINF:10,
/stream/segw.ts?21510&212
#EXTINF:10,
/stream/segw.ts?21510&213
#EXTINF:10,
/stream/segw.ts?21510&214
#EXTINF:10,
/stream/segw.ts?21510&215
0 Kudos
2 REPLIES 2
RokuChris
Roku Employee
Roku Employee

Re: HLS Live playlist issue

Live content is expected to be delivered in a sliding window containing just the few most recent segments. http://sdkdocs.roku.com/display/sdkdoc/ ... iveContent

The Roku starts with the first segment in the playlist. My recollection is that iOS starts 3 segments from the end. You can work around this by giving the playStart attribute a very high value. viewtopic.php?f=34&t=66558&p=425721
0 Kudos
Rek
Visitor

Re: HLS Live playlist issue

"RokuChris" wrote:
Live content is expected to be delivered in a sliding window containing just the few most recent segments. http://sdkdocs.roku.com/display/sdkdoc/ ... iveContent

The Roku starts with the first segment in the playlist. My recollection is that iOS starts 3 segments from the end. You can work around this by giving the playStart attribute a very high value. viewtopic.php?f=34&t=66558&p=425721


Thanks Chris, I was able to solve both problems with PlayStart.

Setting PlayStart to a high value forces the player to start the stream at the end (live position). This ensures the video begins at the correct point; in order to also make sure it continues playing when it runs out of segments, I detect buffer under-run using the roVideoPlayerEvent.isStreamStarted() event combined with the info parameter "isUnderrun". If an under-run occurs, I assume the playlist has run out of segments, re-request the playlist, and begin playback again with PlayStart set very high.
0 Kudos
Need Assistance?
Welcome to the Roku Community! Feel free to search our Community for answers or post your question to get help.

Become a Roku Streaming Expert!

Share your expertise, help fellow streamers, and unlock exclusive rewards as part of the Roku Community. Learn more.