Playback of HLS live event skips part of video on pause/unpause on iOS 9.

Originator:haik.ampardjian
Number:rdar://34239380 Date Originated:2017-09-04
Status:Open Resolved:
Product:iOS Safari Product Version:
Classification:UI/Usability Reproducible:Always
 
Summary:

Playback of HLS live event skips part of video on pause/unpause on iOS
9.

The software product my team is working on delivers personalized
interactive video communications. We serve HLS video to visitors using
iOS Safari. The video is generated at the time of visit, and we let the user
start playing it while it's still not completely generated to reduce
latency. FFmpeg on backend generates video in the background.

So basically that's video on demand (VOD) emulated as live event 
because VOD type of HLS playlist cannot be appended with new chunks per
HLS spec. The problem we have is that if user starts playback and then
pauses for long time, on iOS 9 on resume playback automatically jumps to
much later moment (to one of last segments available on latest
playlist). We want user to watch video without skips, unless user does
it manually.

We have to support iOS 9 and fullscreen playback with native controls
(not inline video playback on HTML page).

I understand that developers can't provide much support for obsolete
versions of software (iOS), but on our commercial projects iOS 9 alone
accounts for 10% of visits so we'd like at last some hack. And by the
way, we don't use HLS for iOS 10 anyway in favour of inline video
playback.

See attached archive ios9_hls_event_footage_skip.tar.xz with files of
bug reproduction case.


Steps to Reproduce:

* Put these files to a web server directory. PHP must be supported.
* Run ./ffmpeg.sh to generate HLS video where each frame shows its PTS.
* Optionally, start watching web server access log
 (e.g. tail -F /var/log/apache2/access_log)
* Open index.html (served by your web server) in Safari on iPhone with
iOS 9.3.5
 (iOS 10.1.1 doesn't reproduce the issue).
* Press "play" on web page on iPhone.
* When native player opens, immediately pause the playback.
* Wait for 5 seconds or more (but less than 2 minutes).
* See that playback has skipped a portion of video.
* To repeat the test, remove file with name "visited" from the web
server directory.


Expected Results:

Playback proceeds from the same point on unpause.

Actual Results:

Playback skips part of video footage on unpause.


Version/Build:

iOS 9.3.5

Configuration:

iPhone 5s

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!