Giter VIP home page Giter VIP logo

Comments (9)

devcshort avatar devcshort commented on June 30, 2024 1

It looks like hls.js doesn't support iOS Safari, because iOS doesn't support media source extensions yet. Currently we are using hls.js as the only way of playing the video, so iOS isn't supported by this package.

from react-hls.

devcshort avatar devcshort commented on June 30, 2024 1

I was able achieve this by using the .isSupported() method from hls.js.

Example React component as follows:

// Other imports
import ReactHlsPlayer from 'react-hls-player';
import HlsJs from 'hls.js';

const Video = () => {
    let videoSource = VIDEO_SOURCE_MP4;

    // Safari browsers (iOS, ipadOS and macOS) have built in HLS support
    if (document.createElement('video').canPlayType('application/vnd.apple.mpegurl')) {
        videoSource = VIDEO_SOURCE_HLS;
    }

    return (
        <div className="video">
            {HlsJs.isSupported() ? (
                <ReactHlsPlayer
                    poster={VIDEO_POSTER}
                    url={VIDEO_SOURCE_HLS}
                    autoplay
                    muted
                    controls
                    loop
                    width="100%"
                />
            ) : (
                <video
                    poster={VIDEO_POSTER}
                    src={videoSource}
                    autoPlay
                    muted
                    controls
                    loop
                    width="100%"
                />
            )}
        </div>
    );
});

Minor gripe that the casing of autoPlay between the video element and react-hls-player library and incompatible so you can't simply spread the common props.

Noted. I'll try to fix the props issue when I have a bit of extra time. I'll probably see about adding in this functionality as well to the library so it will do the checks of HLS compatibility and fallback to hls.js

from react-hls.

devcshort avatar devcshort commented on June 30, 2024 1

@toughdeveloper I've fixed the props issue in the latest version. The root level of the video player now supports all regular video element props with the proper casing. Another big change is the move from using url to now using src. This should make it easier to use all the common props that you'd expect from a video player. I haven't added the fallback to a regular video component yet when HLS is supported, but that's definitely on the agenda for something I'd like to do.

from react-hls.

globalstripe avatar globalstripe commented on June 30, 2024

Also doesn't worked in Chrome on IOS, so not a Safari issue. I guess what is really needed on IOS is a fallback to native player.

from react-hls.

devcshort avatar devcshort commented on June 30, 2024

Also doesn't worked in Chrome on IOS, so not a Safari issue. I guess what is really needed on IOS is a fallback to native player.

As far as I'm aware, all web browsers on iOS use the same engine that Safari uses. Apple doesn't allow custom web browsers. So even Google Chrome uses Safari's engine under the hood.

Unless something has changed recently

from react-hls.

durgendra avatar durgendra commented on June 30, 2024

I moved to react-player and now videos are playing on ios browsers

https://www.npmjs.com/package/react-player

from react-hls.

devcshort avatar devcshort commented on June 30, 2024

Thanks for sharing that @durgendra

from react-hls.

matt-pawley avatar matt-pawley commented on June 30, 2024

I was able achieve this by using the .isSupported() method from hls.js.

Example React component as follows:

// Other imports
import ReactHlsPlayer from 'react-hls-player';
import HlsJs from 'hls.js';

const Video = () => {
    let videoSource = VIDEO_SOURCE_MP4;

    // Safari browsers (iOS, ipadOS and macOS) have built in HLS support
    if (document.createElement('video').canPlayType('application/vnd.apple.mpegurl')) {
        videoSource = VIDEO_SOURCE_HLS;
    }

    return (
        <div className="video">
            {HlsJs.isSupported() ? (
                <ReactHlsPlayer
                    poster={VIDEO_POSTER}
                    url={VIDEO_SOURCE_HLS}
                    autoplay
                    muted
                    controls
                    loop
                    width="100%"
                />
            ) : (
                <video
                    poster={VIDEO_POSTER}
                    src={videoSource}
                    autoPlay
                    muted
                    controls
                    loop
                    width="100%"
                />
            )}
        </div>
    );
});

Minor gripe that the casing of autoPlay between the video element and react-hls-player library and incompatible so you can't simply spread the common props.

from react-hls.

devcshort avatar devcshort commented on June 30, 2024

Latest version works with Safari, using @toughdeveloper 's recommendation above. Closing this issue. Thank you for providing the solution to this.

from react-hls.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.