Coder Social home page Coder Social logo

videogular / ngx-videogular Goto Github PK

View Code? Open in Web Editor NEW
125.0 6.0 33.0 9.01 MB

The HTML5 video player for Angular 2 and successor to videogular2

License: MIT License

JavaScript 3.51% TypeScript 95.15% CSS 0.94% Shell 0.39% HTML 0.01%
html5-video-player angular video-player angular-components video ivy angular15

ngx-videogular's Introduction

Videogular

semantic-release npm bundle size (scoped) npm PRs

Ngx-Videogular is an HTML5 video player for Angular 2.0. Videogular is a wrapper over the HTML5 video tag, so you can just add whatever you want. This provides a very powerful, but simple to use solution, for everybody.

📺 Showcase

📚 Documentation

Moving from Videogular2 to Ngx-Videogular

Since videogular2 is unmaintained, we suggest moving to @videogular/ngx-videogular.
You can check out the migration guide here.

48% smaller bundle size? Ivy Support?
All of that and more!

Version Compatibility

Ngx-Videogular Angular Node
<= ^6.0.0 < 15.0.0 < 16.0.0
^7.0.0 < 8.0.0 ^15.0.0 < 16.0.0 ^14.20.0 || ^16.13.0 || ^18.10.0
^8.0.0 >= 16.0.0 ^16.13.0 || ^18.10.0

DashJS 2.X.X deprecation

From 2.0.1 onwards we'll only support DashJS v3.
For DashJS v2 compatiblity, please use @videogular/ngx-videogular version < 2.0.1.

How to install

To get up and running quickly, check out the getting started guide.

Quick template

Stackblitz Template

Building and Testing

Run start to compile the project, execute tests and check coverage:

npm start

Run build to compile the project:

npm run build

Run test to test the project:

npm test

Run coverage to check the coverage report:

npm run coverage

To start the example app run the following commands and open http://localhost:8080:

cd examples
npm install
npm run build
npm start

Supported by

Videogular wants to thank you to this companies for support this project:

Credits

Videogular is a project created by Raúl Jiménez and released under MIT license.

This project would not be possible without our team members and an amazing community.

ngx-videogular's People

Contributors

ajiiisai avatar dependabot[bot] avatar elecash avatar ixquitilissaid avatar kylesmith0905 avatar mokipedia avatar salesh avatar tojocky avatar tomstolarczuk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ngx-videogular's Issues

Update the imports and examples

Description

All the imports and examples point to the old videogular2. Please update the example, stackblitz, etc.
If you can't update the documentation, consider updating the README.md to explain what has to be done to include the module properly.

Vg playback button rate vgFor issue

Description

Setting vgFor for vg-playback-button is not working properly

Expected Behavior

Set value to the appropriate one

Actual Behavior

Uncaught error TypeError: Cannot create property 'my-video-stream' on number '1'

Steps to Reproduce

  1. set vgFor for vg-playback-button
  2. try to change rate

Production ready?

Without proper documentation, it's a bit hard to judge if this form of videogular is complete or if it is production-ready.

I understand that it is a huge undertaking to take videogular to Angular 9 and beyond. Kudos!

Download Option

Hey,

Is there a way to add a download button within vg-controls?

Cannot read property 'isLast' of null at HTMLVideoElement.onNativePlaybackEnded (dash.all.debug.js:33484)

Description

Changing video bitrate doesn't work with encrypted dash stream using ClearKey.

ERROR TypeError: Cannot read property 'isLast' of null
    at HTMLVideoElement.onNativePlaybackEnded (dash.all.debug.js:33484)

Expected Behavior

Changing video bitrate should work wiith encrypted dash mpd.

Actual Behavior

Receiving error:

ERROR TypeError: Cannot read property 'isLast' of null
    at HTMLVideoElement.onNativePlaybackEnded (dash.all.debug.js:33484)

Steps to Reproduce

  1. mpd used:
<?xml version="1.0"?>
<!-- MPD file Generated with GPAC version 0.8.0-rev0-g6b4ab4012-HEAD  at 2020-09-15T21:42:31.145Z-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500S" type="static" mediaPresentationDuration="PT0H0M29.096S" maxSegmentDuration="PT0H0M4.011S" profiles="urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash264" xmlns:cenc="urn:mpeg:cenc:2013">
 <ProgramInformation moreInformationURL="http://gpac.io">
  <Title>playlist.mpd generated by GPAC</Title>
 </ProgramInformation>

 <Period duration="PT0H0M29.096S">
  <AdaptationSet segmentAlignment="true" lang="eng" startWithSAP="1">
   <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="17c8ad9b-1fdd-e535-9d66-6903b0564336"/>
   <SegmentTemplate media="playlist_segment_audio-encrypted$Number$.m4s" initialization="playlist_segment_audio-encryptedinit.mp4" timescale="48000" startNumber="1" duration="192000"/>
   <Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" bandwidth="249752">
    <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
   </Representation>
  </AdaptationSet>
  <AdaptationSet segmentAlignment="true" maxWidth="1920" maxHeight="1080" maxFrameRate="30000/1001" par="16:9" lang="und" startWithSAP="1">
   <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="17c8ad9b-1fdd-e535-9d66-6903b0564336"/>
   <Representation id="2" mimeType="video/mp4" codecs="avc3.64002A" width="1920" height="1080" frameRate="30000/1001" sar="1:1" bandwidth="3664024">
    <SegmentTemplate media="playlist_segment_video-1080p-FullHD-encrypted$Number$.m4s" initialization="playlist_segment_video-1080p-FullHD-encryptedinit.mp4" timescale="30000" startNumber="1" duration="120000"/>
   </Representation>
   <Representation id="3" mimeType="video/mp4" codecs="avc3.64002A" width="1280" height="720" frameRate="30000/1001" sar="1:1" bandwidth="2061368">
    <SegmentTemplate media="playlist_segment_video-720p-HD-encrypted$Number$.m4s" initialization="playlist_segment_video-720p-HD-encryptedinit.mp4" timescale="30000" startNumber="1" duration="120000"/>
   </Representation>
   <Representation id="4" mimeType="video/mp4" codecs="avc3.64002A" width="852" height="480" frameRate="30000/1001" sar="640:639" bandwidth="1251672">
    <SegmentTemplate media="playlist_segment_video-480p-SD-encrypted$Number$.m4s" initialization="playlist_segment_video-480p-SD-encryptedinit.mp4" timescale="30000" startNumber="1" duration="120000"/>
   </Representation>
   <Representation id="5" mimeType="video/mp4" codecs="avc3.64002A" width="640" height="360" frameRate="30000/1001" sar="1:1" bandwidth="642328">
    <SegmentTemplate media="playlist_segment_video-360p-encrypted$Number$.m4s" initialization="playlist_segment_video-360p-encryptedinit.mp4" timescale="30000" startNumber="1" duration="120000"/>
   </Representation>
   <Representation id="6" mimeType="video/mp4" codecs="avc3.64002A" width="426" height="240" frameRate="30000/1001" sar="640:639" bandwidth="421032">
    <SegmentTemplate media="playlist_segment_video-240p-encrypted$Number$.m4s" initialization="playlist_segment_video-240p-encryptedinit.mp4" timescale="30000" startNumber="1" duration="120000"/>
   </Representation>
   <Representation id="7" mimeType="video/mp4" codecs="avc3.64002A" width="256" height="144" frameRate="30000/1001" sar="1:1" bandwidth="195240">
    <SegmentTemplate media="playlist_segment_video-144p-encrypted$Number$.m4s" initialization="playlist_segment_video-144p-encryptedinit.mp4" timescale="30000" startNumber="1" duration="120000"/>
   </Representation>
  </AdaptationSet>
 </Period>
</MPD>
  1. Set default video bitrate to 480p;
  2. Playback autoplays (with any of the video bitrate if provided by default).
  3. Manually change the video bitrate using the video-bitrate-selector component.
  4. Playback is stopped and error occurs in Chrome:
ERROR TypeError: Cannot read property 'isLast' of null
    at HTMLVideoElement.onNativePlaybackEnded (dash.all.debug.js:33484)
  1. Playback is stopped and error occurs in Firefox:
Media resource blob:http://localhost:8080/2a0cd123-b88c-9449-8c32-e63881a072a1 could not be decoded.
This error message will be blank when privacy.resistFingerprinting = true.  If it is really necessary, please add it to the whitelist in MediaError::GetMessage: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005) - RefPtr<MediaSourceTrackDemuxer::SeekPromise> mozilla::MediaSourceTrackDemuxer::DoSeek(const mozilla::media::TimeUnit &): manager is detached. dash.all.debug.js:35437
This error message will be blank when privacy.resistFingerprinting = true.  If it is really necessary, please add it to the whitelist in MediaError::GetMessage: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005) - RefPtr<MediaSourceTrackDemuxer::SeekPromise> mozilla::MediaSourceTrackDemuxer::DoSeek(const mozilla::media::TimeUnit &): manager is detached. dash.all.debug.js:35438
Media resource blob:http://localhost:8080/2a0cd123-b88c-9449-8c32-e63881a072a1 could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005)
Details: RefPtr<MediaSourceTrackDemuxer::SeekPromise> mozilla::MediaSourceTrackDemuxer::DoSeek(const mozilla::media::TimeUnit &): manager is detached.

Attachments

If needed I can provide a full archive with mpd and mp4, m4s and m4a files.

Fullscreen mode on Ipad doesn't work

Description

When I click on the toggle fullscreen icon on Ipad the fullscreen does not enable - only the fullscreen icon changes

Expected Behavior

Clicking on the fullscreen icon <vg-fullscreen></vg-fullscreen> should toggle fullscreen mode on the Ipad

Actual Behavior

Clicking on the fullscreen icon <vg-fullscreen></vg-fullscreen> doesn't toggle fullscreen mode on the Ipad

Steps to Reproduce

  1. Run ionic application with ngx video player on the Ipad
  2. Try to enable fullscreen mode

Attachments

Try to include screenshots for bugs or design assets for enhancements

Setting a thumbnail?

Description

I'd like to set a thumbnail that appears on the video player

Expected Behavior

I'd assume some element could help facilitate that (maybe <vg-overlay-play>?) but I don't see anything in documentation

Installation on Windows fails, additional steps required

Thanks for taking the time to get this working on Ivy! I had a small struggle to install version 2.0.0 on Windows 10, Angular 10 so hopefully this helps someone else.

  1. @nrwl/workspace is required, but not in the package.json so needs to be added manually.
    npm i --save-dev @nrwl/workspace

  2. During installation I hit the error, Unable to create a symlink from the Angular CLI to the Nx CLI:ENOENT: no such file or directory, open './node_modules/.bin/nx'. The files exist but the postinstall script is pointing to the ngx-videogular's node_modules and not the root node_modules. The solution is to copy the /node_modules/.bin/nx.* files to /node_modules/@videogular/ngx-videogular/node_modules/.bin Adding nx to the dev dependencies should resolve this, but didn't test.

  3. Finally, you can install v2.0.0 like this:
    npm i --save @videogular/[email protected]

How to play YouTube and Vimeo videos?

Description

Please tell me that how can I play youtube and vimeo videos in ngx-videogular.
It would be great if you response me asap.

Expected Behavior

If this is an issue, document the expected behavior. If this is a feature, delete this block.

Actual Behavior

If this is an issue, describe the actual behavior. If this is a feature, delete this block.

Steps to Reproduce

If this is an issue, describe the steps you took to see the issue. If this is a feature, delete this block.

  1. Step 1
  2. Step 2

Attachments

Try to include screenshots for bugs or design assets for enhancements

Image Title
(https://media.giphy.com/media/143vPc6b08locw/giphy.gif)
Image description

How to change vgHls?

Description

I'm trying to change the vgHls origin but I only see responses for tags what I'm trying is that I'm going to add a button and that button call a method so it will update the vgHls source but haven't found anything related could someone please give guidance for this?

Actual code for video:
<video #myMedia [vgMedia]="myMedia" [vgHls]="media.url" (onGetBitrates)="hlsBitrates = $event" id="my-video" type="video/mp4" preload="metadata" playsinline autoplay crossorigin>

Expected Behavior

Looking for a way to change the vgHls source for another and reload video or page.

Actual Behavior

Unknown how to change vgHls source so it only displays one video.

Type 'HTMLVideoElement' is missing the following properties from type 'IMediaElement': audioTracks, msAudioCategory, msAudioDeviceType, msGraphicsTrustStatus, and 13 more.

Description

Hi
I am totally new to Angular.
I am trying to show a live stream with the help of ngx-videogular and I am pretty sure I have done all the steps

Expected Behavior

It should show the video

Steps to Reproduce

<video [vgMedia]="media" #media id="singleVideo" preload="auto" crossorigin > <source src="http://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.m3u8" type="video/mp4" /> </video>

Attachments

Screen Shot 2021-01-21 at 3 02 52 PM

Screen Shot 2021-01-21 at 3 10 26 PM

Image Title
(https://media.giphy.com/media/143vPc6b08locw/giphy.gif)
Image description

Cant play azure media player url

Description

Cant play azure media service URL in the player. The player keeps showing the loading symbol always.

Steps to Reproduce

Simply added the source to a azure media player service URL.

      src="http://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest"
      type="application/vnd.ms-sstr+xml"/>
    

onPlayerReady type was VgAPI and now is any

So I followed the comments about taking the lead here with this new project.
That is nice but can you can tell me why does the types have changed?

Example before:

onPlayerReady: EventEmitter<VgApi>;

Example after:

onPlayerReady: EventEmitter<any>;

Is it on purpose?
If so, why?

ngx-videogular not working with Angular 13

Good morning,

I want to upgrade from Angular12 to Angular13, but I get the following error message when running "npm update":

npm ERR! Could not resolve dependency:
npm ERR! peer @angular/common@">=8.0.0 <13.0.0" from @videogular/[email protected]
npm ERR! node_modules/@videogular/ngx-videogular
npm ERR! @videogular/ngx-videogular@"^5.0.0" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

Angular 10 Issues AudioTrackList & VideoTrackList

Description

Getting error

Expected Behavior

Should run the app without any error

Actual Behavior

Getting the issues

`ERROR in node_modules/ngx-videogular/lib/core/vg-media/i-media-element.d.ts:17:27 - error TS2304: Cannot find name 'AudioTrackList'.

17 readonly audioTracks: AudioTrackList;
~~~~~~~~~~~~~~
node_modules/ngx-videogular/lib/core/vg-media/i-media-element.d.ts:139:27 - error TS2304: Cannot find name 'VideoTrackList'.

139 readonly videoTracks: VideoTrackList;
~~~~~~~~~~~~~~
node_modules/ngx-videogular/lib/core/vg-media/vg-media-element.d.ts:5:24 - error TS2304: Cannot find name 'AudioTrackList'.

5 get audioTracks(): AudioTrackList;
~~~~~~~~~~~~~~
node_modules/ngx-videogular/lib/core/vg-media/vg-media-element.d.ts:42:18 - error TS2304: Cannot find name 'VideoTrackList'.

42 videoTracks: VideoTrackList;
~~~~~~~~~~~~~~`

Attachments

image

Press playback button - set wrong playback speed

I have the following playback-values array:
<vg-playback-button [playbackValues]="[1, 2, 4, 8, 16]"

Initial playback speed is 1 - ok. But when I press playback button, the speed 4 is set - wrong.
Must be 2.
When I add "0.5" as 1-st element in array [0.5, 1, 2, 4, 8, 16] - all is ok.

Expected Behavior

When I press on "1" - "2" is set.

Actual Behavior

When I press on "1" - "4" is set.

Attachments

Initial value 1 - ok
image

Next value 4 - not ok
image

Play button not working for @videogular/ngx-videogular v5.0.1

I upgraded my project's Angular version from 9 to 13 recently. Since videogular2 package is no longer supported with this version, I migrated the application to use @videogular/ngx-videogular and I exactly followed process for migration mentioned on the github page.

After migration, it appears my "Play video" button and controls like full screen, video scroll are missing. This is due to absence of class on the DOM. I compared other environments we have before changes and DOM looks a bit different. It doesn't have "vg-icon-play_arrow" on the DOM at all. This is how it looks -

We are maintaining local videogular.css and I see its already imported in style.scss which is correctly mentioned in Angular.json. I am not an expert in front end and not sure how can I find out why this is class "vg-icon-play_arrow" and flex is missing on "div" element "overlay-play-container"

Any suggestions on how to approach finding whats the problem? or what might be solution?

DOM

Note: I already tried using node_modules css which is recommended by @videogular/ngx-videogular by directly using in Angular.json instead of project videogular.css but it gives same results. Also all fonts files are latest as per recommendation

Expected Behavior

Play pause button and other controls should appear on the video

Actual Behavior

"Play video" button and controls like full screen, video scroll are missing. They only appear if css classes are manually added to the DOM

Steps to Reproduce

If this is an issue, describe the steps you took to see the issue. If this is a feature, delete this block.
Just open the video on the site and observe the tile

When skipping video, it does not get to the right time

Description

Hello, I'm having an issue with ngx-videogular, I'm using a ionic 4, angular 8, cordova project, for both Android and iOS, actually this only happens with iOS devices, the player is inside a ionic modal. I'm using AWS Cloud-front infrastructure with s3 to provide the file to the streaming players.

UPDATE 1: If I remove the playsinline property from the video tag, the iOS player takes place and it works as expected, I guess it's something to do with the WKWebview.

Expected Behavior

When the user skips the video forward or backwards it should stay exactly the time chosen

Actual Behavior

When the user skips the video forward or backwards, clicking in a position or dragging the ball forward or backwards causes the time to not settle right, and then it automatically changes for previous value

Steps to Reproduce

I have a video showing the behavior, I tried almost everything in order to fix this, I'll post my code to see if everything is right

Component/Template code

// video-player.component.ts
import {
  Component,
  ChangeDetectionStrategy,
  Input,
  ViewChild,
  OnDestroy
} from '@angular/core';
import { ModalController, Platform } from '@ionic/angular';
import { VgApiService } from '@videogular/ngx-videogular/core';
import { UserService } from 'src/app/services/data/user.service';
import { AuthService } from 'src/app/services/auth/auth.service';

@Component({
  selector: 'video-player',
  templateUrl: './video-player.component.html',
  styleUrls: ['./video-player.component.scss'],
})
export class VideoPlayerComponent implements OnDestroy {
  @ViewChild('media', { static: false }) video;
  @ViewChild('control', { static: false }) control;
  @Input() videoTime = 0;
  @Input() url: string;
  @Input() thumbnail: string;
  @Input() aulaId: number;
  // tslint:disable-next-line: ban-types
  @Input() updateAulaFn: Function;
  saveTime: number = 0;
  duration: number = 0;

  unsubscribeArray = [];

  constructor(
    private modal: ModalController,
    private user: UserService,
    private auth: AuthService,
    private platform: Platform,
  ) {
  }

  onPlayerReady(videoApi: VgApiService) {
    this.unsubscribeArray.push(
      videoApi.getDefaultMedia().subscriptions.timeUpdate.subscribe(e => {
        this.saveTime = e.target.currentTime;
      }),
      videoApi.getDefaultMedia().subscriptions.durationChange.subscribe(e => {
        this.duration = e.target.duration;
      }),
      videoApi.getDefaultMedia().subscriptions.ended.subscribe(() => {
        this.handleClose();
      }),
    );

    if (this.platform.is('ios')) {
      this.unsubscribeArray.push(
        videoApi.getDefaultMedia().subscriptions.canPlay.subscribe(() => {
          videoApi.getDefaultMedia().currentTime = Math.round(this.videoTime) || 0;
        }),
      );
    } else {
      this.unsubscribeArray.push(
        videoApi.getDefaultMedia().subscriptions.loadStart.subscribe(() => {
          videoApi.getDefaultMedia().currentTime = Math.round(this.videoTime) || 0;
        }),
      );
    }
  }

  handleClose() {
    if (this.aulaId) {
      const isFinished = this.saveTime >= this.duration - 0.5;

      const currentTime = isFinished ? 0 : this.saveTime;

      this.updateAulaFn(isFinished, currentTime);

      this.user.updateAula(
        this.auth.user.id,
        this.aulaId,
        currentTime,
        isFinished
      );
    }

    this.modal.dismiss();
  }

  ngOnDestroy() {
    this.unsubscribeArray.forEach(subscription => subscription.unsubscribe());
    this.handleClose();
  }
}
// video-player.component.html
<vg-player (onPlayerReady)="onPlayerReady($event)">
  <vg-buffering></vg-buffering>
  <vg-controls [vgAutohide]="true" [vgAutohideTime]="2.0" class="controls">
    <vg-play-pause></vg-play-pause>

    <vg-time-display vgProperty="current" vgFormat="mm:ss"></vg-time-display>
    <vg-time-display vgProperty="total" vgFormat="mm:ss"></vg-time-display>

    <vg-scrub-bar [vgSlider]="true">
      <vg-scrub-bar-current-time [vgSlider]="true"></vg-scrub-bar-current-time>
      <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>
    </vg-scrub-bar>

    <button class="btnClose" (click)="handleClose()">
      <ion-icon size="24" name="close"></ion-icon>
    </button>
  </vg-controls>

  <!-- <video [vgMedia]="media" playsinline #media autoplay preload="auto" [poster]="thumbnail">
    <source [src]="url" />
  </video> -->
  <video #media
    #vgHls="vgHls"
    [vgHls]="url"
    [vgMedia]="media"
    playsinline
    autoplay
    [poster]="thumbnail"
  >
  </video>
</vg-player>

Attachments

Link to the video., showing the behavior.

If there's more information to provide I'm willing to help, thanks a lot for the time and effort put in this project, I've been using it for more than 3 years.

Type 'HTMLVideoElement' is missing the following properties from type 'IMediaElement'

Description

installed "@videogular/ngx-videogular": "^4.0.0",

Added to app.module.ts:

import { VgBufferingModule } from '@videogular/ngx-videogular/buffering';
import { VgControlsModule } from '@videogular/ngx-videogular/controls';
import { VgCoreModule } from '@videogular/ngx-videogular/core';
import { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play';

Created new component containing the following code from the example:

<vg-player>
        <video [vgMedia]="media" #media id="singleVideo" preload="auto" controls>
            <source src="http://static.videogular.com/assets/videos/videogular.mp4" type="video/mp4">
        </video>
    </vg-player>

and to my video.component.ts:

import { VgApiService } from '@videogular/ngx-videogular/core';

Expected Behavior

Expected video to play or the project to compile

Actual Behavior

Received compile error:
Type 'HTMLVideoElement' is missing the following properties from type 'IMediaElement': audioTracks, msAudioCategory, msAudioDeviceType, msGraphicsTrustStatus, and 13 more.

Steps to Reproduce

ng build

Attachments

Try to include screenshots for bugs or design assets for enhancements

Image Title
(https://media.giphy.com/media/143vPc6b08locw/giphy.gif)
Image description

Question: Dashjs v3 support?

Description

Does ngx-videogular support dashjs v3?

Expected Behavior

dashjs v3 is supported.

Actual Behavior

dashjs v2 is supported.

@angular/core@<10.0.3

Description

package.json of the lib states @angular/core, @angular/common, @angular/platform-browser-dynamic <10.0.3
Please change to ^8.0.0, || ^9.0.0 || ^10.0.0

Expected Behavior

Expected behavior would be to see no warnings when installing under @angular/[email protected]

Actual Behavior

Peer dependency warning because angular bugfix version surpassed 10.0.3 (actually your parent package.json uses ^10.0.3 as well, so you should see the same warning too).

Steps to Reproduce

install @videogular/ngx-videogular while using @angular/core ^10.0.3

How can I define the language of the "skip ad" button

Description

I am not able to define the language for the "skip ad" button

Expected Behavior

I would expect a way to be able to do this by either of the two methods provided by the google sdk.

1.) https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/localization
2.) https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/faq#13

Actual Behavior

I was not able to define the language.

Steps to Reproduce

1.) Create a sample app as found in the repo
2.) Try to change the language

error on angular 12.2.4 with videogular version 4.1.0

Description

Cant compile project because this errors:

  • Cannot find name 'MSGraphicsTrust'.
  • Cannot find name 'MSMediaKeys'.

Expected Behavior

If this is an issue, document the expected behavior. If this is a feature, delete this block.

Actual Behavior

If this is an issue, describe the actual behavior. If this is a feature, delete this block.

Steps to Reproduce

If this is an issue, describe the steps you took to see the issue. If this is a feature, delete this block.

  1. Step 1
  2. Step 2

Attachments

Try to include screenshots for bugs or design assets for enhancements

Image Title
(https://media.giphy.com/media/143vPc6b08locw/giphy.gif)
Image description

Api to customize css for controls based on theme

Description

Describe the issue or new feature.
Is there documentation anywhere that allows for this? I would really like to modify the color on the controls to a material based theme using the 'simple player' from the showcase.

Cannot find name 'MSMediaKeyNeededEvent'

Description

Getting this error when trying to run your quick start guide.
Package.json:
{ "name": "freeamateur", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test" }, "private": true, "dependencies": { "@angular/animations": "~12.1.0", "@angular/common": "~12.1.0", "@angular/compiler": "~12.1.0", "@angular/core": "~12.1.0", "@angular/forms": "~12.1.0", "@angular/platform-browser": "~12.1.0", "@angular/platform-browser-dynamic": "~12.1.0", "@angular/router": "~12.1.0", "@fortawesome/angular-fontawesome": "^0.9.0", "@fortawesome/fontawesome-free": "^5.15.3", "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-brands-svg-icons": "^5.15.3", "@fortawesome/free-regular-svg-icons": "^5.15.3", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@videogular/ngx-videogular": "^4.0.0", "bootstrap": "^5.0.2", "core-js": "^3.15.1", "rxjs": "~7.1.0", "tslib": "^2.3.0", "zone.js": "~0.11.4" }, "devDependencies": { "@angular-devkit/build-angular": "~12.1.0", "@angular/cli": "~12.1.0", "@angular/compiler-cli": "~12.1.0", "@types/core-js": "^2.5.4", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "jasmine-core": "~3.7.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.0.3", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "typescript": "~4.3.2" } }

Angular.json:
{ "name": "freeamateur", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test" }, "private": true, "dependencies": { "@angular/animations": "~12.1.0", "@angular/common": "~12.1.0", "@angular/compiler": "~12.1.0", "@angular/core": "~12.1.0", "@angular/forms": "~12.1.0", "@angular/platform-browser": "~12.1.0", "@angular/platform-browser-dynamic": "~12.1.0", "@angular/router": "~12.1.0", "@fortawesome/angular-fontawesome": "^0.9.0", "@fortawesome/fontawesome-free": "^5.15.3", "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-brands-svg-icons": "^5.15.3", "@fortawesome/free-regular-svg-icons": "^5.15.3", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@videogular/ngx-videogular": "^4.0.0", "bootstrap": "^5.0.2", "core-js": "^3.15.1", "rxjs": "~7.1.0", "tslib": "^2.3.0", "zone.js": "~0.11.4" }, "devDependencies": { "@angular-devkit/build-angular": "~12.1.0", "@angular/cli": "~12.1.0", "@angular/compiler-cli": "~12.1.0", "@types/core-js": "^2.5.4", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "jasmine-core": "~3.7.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.0.3", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "typescript": "~4.3.2" } }

app.module.ts:
`import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { HomepageComponent } from './homepage/homepage.component';
import { VideoplayerComponent } from './videoplayer/videoplayer.component';

import {VgCoreModule} from '@videogular/ngx-videogular/core';
import {VgControlsModule} from '@videogular/ngx-videogular/controls';
import {VgOverlayPlayModule} from '@videogular/ngx-videogular/overlay-play';
import {VgBufferingModule} from '@videogular/ngx-videogular/buffering';

@NgModule({
declarations: [
AppComponent,
HomepageComponent,
VideoplayerComponent
],
imports: [
BrowserModule,
AppRoutingModule,
FontAwesomeModule,
VgCoreModule,
VgControlsModule,
VgOverlayPlayModule,
VgBufferingModule
],
providers: [],
bootstrap: [AppComponent],
exports:[
VgCoreModule,
VgControlsModule,
VgOverlayPlayModule,
VgBufferingModule,]
})
export class AppModule { }
`

tsconfig.json:
/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, "compilerOptions": { "baseUrl": "./", "outDir": "./dist/out-tsc", "forceConsistentCasingInFileNames": true, "strict": false, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "sourceMap": true, "declaration": false, "downlevelIteration": true, "experimentalDecorators": true, "moduleResolution": "node", "importHelpers": true, "target": "es2017", "module": "es2020", "lib": [ "es2018", "dom" ] }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, "strictInputAccessModifiers": true, "strictTemplates": true } }

HTML:
`

<vg-scrub-bar>
    <vg-scrub-bar-current-time></vg-scrub-bar-current-time>
    <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>
</vg-scrub-bar>

<vg-controls>
    <vg-play-pause></vg-play-pause>
    <vg-playback-button></vg-playback-button>

    <vg-time-display vgProperty="current" vgFormat="mm:ss"></vg-time-display>

    <vg-scrub-bar style="pointer-events: none;"></vg-scrub-bar>

    <vg-time-display vgProperty="left" vgFormat="mm:ss"></vg-time-display>
    <vg-time-display vgProperty="total" vgFormat="mm:ss"></vg-time-display>

    <vg-track-selector></vg-track-selector>
    <vg-mute></vg-mute>
    <vg-volume></vg-volume>

    <vg-fullscreen></vg-fullscreen>
</vg-controls>

<video [vgMedia]="$any(media)" #media id="singleVideo" preload="auto" crossorigin>
    <source src="http://static.videogular.com/assets/videos/videogular.mp4" type="video/mp4">
    <source src="http://static.videogular.com/assets/videos/videogular.ogg" type="video/ogg">
    <source src="http://static.videogular.com/assets/videos/videogular.webm" type="video/webm">

    <track kind="subtitles" label="English" src="http://static.videogular.com/assets/subs/pale-blue-dot.vtt" srclang="en" default>
    <track kind="subtitles" label="Español" src="http://static.videogular.com/assets/subs/pale-blue-dot-es.vtt" srclang="es">
</video>

`

Error log:
Error: node_modules/@videogular/ngx-videogular/core/lib/directives/vg-media/vg-media-element.d.ts:32:23 - error TS2304: Cannot find name 'MSMediaKeyNeededEvent'.

32 onmsneedkey: (ev: MSMediaKeyNeededEvent) => any;
~~~~~~~~~~~~~~~~~~~~~

Error: node_modules/@videogular/ngx-videogular/core/lib/interfaces/i-media-element.interface.d.ts:107:47 - error TS2304: Cannot find name 'MSMediaKeyNeededEvent'.

107 onmsneedkey: (this: HTMLMediaElement, ev: MSMediaKeyNeededEvent) => any;
~~~~~~~~~~~~~~~~~~~~~

Can someone help me? Thank you!

angular 12 compatibility

Description

Describe the issue or new feature.

Expected Behavior

If this is an issue, document the expected behavior. If this is a feature, delete this block.

Actual Behavior

If this is an issue, describe the actual behavior. If this is a feature, delete this block.

Steps to Reproduce

If this is an issue, describe the steps you took to see the issue. If this is a feature, delete this block.

  1. Step 1
  2. Step 2

Attachments

Try to include screenshots for bugs or design assets for enhancements

Image Title
(https://media.giphy.com/media/143vPc6b08locw/giphy.gif)
Image description

Controlling how much the browser hits the server for data

Description

I have rolled my own API to deliver the bytes for particular videos to the browser using videogular. There is quite high CPU usage on the server for each request from the browser. After enabling logging on the server, the browser is hitting the API A LOT for just small amounts of data.

Question

Is there any way to minimize the calls to the server? Have it buffer a bit more data so it hits it less?

FYI I'm using Videogular2 still, but since this is the now the maintained fork and read the code is identical for now, I'm posting here.

Attachments

Example of output of the logging on the server and how much the client is hitting it for small amounts of data.

2020-08-05 08:06:23.3364 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:23.5166 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:23.5941 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:23.6556 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:23.7211 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:23.7990 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:23.8911 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.0041 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.0783 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.2858 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.4032 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.4767 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.5101 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.5697 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.7397 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.8861 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:24.9731 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.1383 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.2612 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.3056 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.3878 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.4831 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.5650 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:25.9089 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:26.0172 Returning file stream for: /media/filename.mp4
2020-08-05 08:06:26.1075 Returning file stream for: /media/filename.mp4

Error executing ionic build --prod with ionic5 + Angular12.1.1

Error: src/app/share/videogular2-player/videogular2-player.component.html:20:11 - error TS2740: Type 'HTMLVideoElement' is missing the following properties from type 'IMediaElement': audioTracks, msAudioCategory, msAudioDeviceType, msGraphicsTrustStatus, and 13 more.

<video [vgMedia]="media"

Play/Pause button not working when reproducing a second video

Hi,
I have a component to display a set of tutorial videos.
The component receives the video url as a query parameter in the route.
After loading the first video the component works fine. When I send the second url, the component loads the video correctly but when I click play, the video start the reproduction but the button does not change to pause. This happens in chrome and edge, but no in Firefox.

This is the template file:
´

<video [vgMedia]="$any(media)" #media
id="player"
preload="auto"
crossorigin
controls
controlsList="nodownload">
<source [src]="this.videoURL()" type="video/mp4">
<track kind="subtitles" label="{{LANG_CODE}}" [src]="this.ccFileURL()" srclang="{{LANG_CODE}}" default>


´
And this is the component:

import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
import { VgMediaDirective } from '@videogular/ngx-videogular/core';

@component({
selector: 'app-video-viewer',
templateUrl: './video-viewer.html',
styleUrls: ['./video-viewer.scss']
})
export class VideoViewerComponent implements OnInit, OnDestroy {

public safeUrl: SafeResourceUrl;
public safeCCFileUrl: SafeResourceUrl;
public title: string;

@ViewChild(VgMediaDirective, { static: true }) player: VgMediaDirective;

LANG_CODE: string;

public isAlreadySafe: boolean = false;
private isCCFileAlreadySafe: boolean = false;
private url: string;
private ccFileName: string = '';
private subs = new Subscription();

constructor(private route: ActivatedRoute,
            private sanitizer: DomSanitizer) {

    this.LANG_CODE = 'EN';
}

videoURL() {
    if (!this.isAlreadySafe) {
        this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);
        this.isAlreadySafe = true;
        this.player.loadMedia();
    }
    return this.safeUrl;
}

ccFileURL() {
    if (!this.isCCFileAlreadySafe) {
        this.safeCCFileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.ccFileName);
        this.isCCFileAlreadySafe = true;
    }
    return this.safeCCFileUrl;
}

ngOnInit(): void {
    this.subs.add(
        this.route.queryParams.subscribe(param => {
            this.isAlreadySafe = false;
            this.isCCFileAlreadySafe = false;
            this.url = 'prm-url';
            this.title = 'prm-title';
            this.ccFileName = 'prm-cc-file';

            if (this.ccFileName === '') {
                this.ccFileName = this.url.substr(0, this.url.length - 3) + 'vtt';
            }
        })
    );
}

ngOnDestroy(): void {
    this.subs.unsubscribe();
}

}

Any help is welcome.
Best regards,

Mariano

Support ClearKey Encrypted HLS

Description

I've packaged encrypted media files into dash and hls using MP4Box using filters to generate both manifests (dash and hls) manifest.m3u8:dual. Dual filter was introduced in GPAC v0.9.0. More info about this here: https://github.com/gpac/testsuite/blob/filters/scripts/hls-gen.sh

vgDash is working great with ClearKey DRM but I'm stuck with Hls on Safari.

I'm using both dash and hls directives:

<video ... [vgDash]="video.dashManifest"
               [vgHls]="video.hlsManifest"
               [vgDRMToken]="video.token"
               [vgDRMLicenseServer]="video.licenseServers"><track ... /></video>

And I'm changing bitrates based on this value:

  get isHlsSupported() {
    const videoElement = this.videoPlayer?.nativeElement;
    const hlsSupported = videoElement && videoElement.canPlayType("application/vnd.apple.mpegurl");
    if (hlsSupported) {
      console.log("HLS SUPPORTED BROWSER");
    }
    return hlsSupported;
  }

I see that vgDRMToken and vgDRMLicenseServer are available only for vgDash.
Is there any other way to specify ClearKey for vgHls?

I've seen this comment (video-dev/hls.js#2901 (comment)) and I think ClearKey support will be introduced in [email protected].

Expected Behavior

ClearKey Encrypted Hls to work.

Actual Behavior

Currently, the player, loads manifest.m3u8 playlist and associated segments, but can not decrypt and displays 00:00 video.

Steps to Reproduce

  1. Encrypt video and audio files
  2. Generate dash and hls manifest.m3u8:dual based on encrypted media
  3. Use [vgHls]="'http://localhost:/manifest.m3u8'"
  4. hls can not decrypt video stream. No errors in console though.

Attachments

HLS Supported in Safari

DASH Supported in Chrome

videogular2 Cannot find name 'AudioTrackList'. && 'VideoTrackList'

Description

using Angular-8
"@angular/animations": "8.x.x",
"@angular/common": "8.x.x",
"@angular/compiler": "8.x.x",
"@angular/core": "8.x.x",
trying to build the app but i get the following errors.

Expected Behavior

it should be built and run normally

Actual Behavior

[at-loader] Checking finished with 4 errors chunk {0} vendor.js (vendor) 4.06 MB {2} [initial] [rendered]
chunk {1} app.js, app.css (app) 3.63 MB {0} [initial] [rendered]
chunk {2} polyfills.js (polyfills) 695 kB [entry] [rendered]

ERROR in [at-loader] ./node_modules/videogular2/src/core/vg-media/i-media-element.d.ts:17:27
TS2304: Cannot find name 'AudioTrackList'.

ERROR in [at-loader] ./node_modules/videogular2/src/core/vg-media/i-media-element.d.ts:135:27
TS2304: Cannot find name 'VideoTrackList'.

ERROR in [at-loader] ./node_modules/videogular2/src/core/vg-media/vg-media-element.d.ts:5:27
TS2304: Cannot find name 'AudioTrackList'.

ERROR in [at-loader] ./node_modules/videogular2/src/core/vg-media/vg-media-element.d.ts:42:18
TS2304: Cannot find name 'VideoTrackList'.
webpack: Failed to compile.

Steps to Reproduce

Step 1: npm install
Step 2: npm start

Videogular2 error.txt

please support or tell us if it is not possible to can look for alternatives..

i am posting here for Videogoular2 according your post on Videogoular2/issues
Screenshot 2020-07-17 at 15 06 50

Not working with angular 13

Description

Error in lib at compiling. Because of removed interfaces in type script.

Expected Behavior

If this is an issue, document the expected behavior. If this is a feature, delete this block.

Actual Behavior

If this is an issue, describe the actual behavior. If this is a feature, delete this block.

Steps to Reproduce

If this is an issue, describe the steps you took to see the issue. If this is a feature, delete this block.

  1. Step 1
  2. Step 2

Attachments

Try to include screenshots for bugs or design assets for enhancements

Image Title
(https://media.giphy.com/media/143vPc6b08locw/giphy.gif)
Image description

Buffer ring never stops

Description

Hi,
I am experiencing an error which hasnt happened in older versions of videogular (for me)
but obviously there were already tickets about that:

videogular/videogular2#726
videogular/videogular2#628

The issu eonly happens when tring to display a live source from our wowza, but not having a source stream connected yet.

The hls playlist.m3u8
just looks like

#EXTM3U
#EXT-X-VERSION:3

And the buffer ring, never dissapears

Expected Behavior

Let the bufferring disappear

Actual Behavior

It does not :)

Steps to Reproduce

Deliver a playlist.m3u8 with above content and use it as a vgHls source in ngx-videogular 2.10

Pause method not catching rejected Promise

Description

  1. Start to play video
  2. Video is spinning -> playPromise is in Pending state (URL is bad and it will continue to spin)
  3. User try to click pause a couple of time
  pause() {
    // browser has async play promise
    if (this.playPromise) {
      this.playPromise.then(() => {
        this.vgMedia.pause();
      }).
    } else {
      this.vgMedia.pause();
    }
  }

.then() will create Promise for each click of pause state resulting in a couple of Promise in waiting for resolution.
I navigate to another page.

Expected Behavior

We catch all create Promise from pause method

Actual Behavior

Currently, only the Promise from play() method will be catch-ed others will result in

Error: An unexpected error occurred: Uncaught (in promise): AbortError: The play() request was interrupted by a new load request. https://goo.gl/LdLk22

Can't play video on mobile browser

Description

Hi,
I'm experiencing a problem where Videos wont play on mobile browsers ( safari, chrome).
I'm loading an mp4 video and on the desktop everything works fine.
However on mobile the loading spinner never disappears and i cant start playing the video.
If i click on full screen mode i can use the bar to scroll forward and backwards in the video so i do believe its fully loaded.

I also noticed that when i uncomment this.track.mode = 'hidden' the video can play.

 onPlayerReady(api: VgApiService) {
    this.api = api;
    this.track = this.api.textTracks[0];
    //this.track.mode = 'hidden';

    this.setVideoToBeginningAfterEnd();
    this.addAllStepsAsCuePoints();

    this.api.play();
  } 

Expected Behavior

Video loads on mobile and starts playing.

Actual Behavior

Video loads on mobile, loader spinner never disappears. Cant play the video.

Code


  <vg-player (onPlayerReady)="onPlayerReady($event)">

    <vg-overlay-play></vg-overlay-play>
    <vg-buffering></vg-buffering>
    <vg-controls>
      <vg-play-pause></vg-play-pause>
      <vg-playback-button></vg-playback-button>

      <vg-scrub-bar>
        <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>
        <vg-scrub-bar-current-time></vg-scrub-bar-current-time>
        <vg-scrub-bar-cue-points [vgCuePoints]="vgCuePoints"></vg-scrub-bar-cue-points>
      </vg-scrub-bar>

      <vg-time-display vgProperty="left" vgFormat="mm:ss"></vg-time-display>
      <vg-mute></vg-mute>

      <vg-fullscreen></vg-fullscreen>
    </vg-controls>

    <video #media [vgMedia]="media" id="singleVideo" preload="auto">
      <source *ngFor="let video of sources" [src]="video.src" [type]="video.type">
      <track vgCuePoints default (onEnterCuePoint)="onEnterCuePoint($event)" (onExitCuePoint)="onExitCuePoint()">
    </video>
  </vg-player>

SSR - Cannot read property 'unsubscribe' of undefined

Description

I'm getting the error: "TypeError: Cannot read property 'unsubscribe' of undefined at VgMediaDirective.ngOnDestroy" in SSR.
I'm using Angular 10.
This issue was also reported in the previous version of this library videogular/videogular2#888

Expected Behavior

Videogular library should be able to load in server side.

Actual Behavior

Videogular throws this error and doesn't load.

Steps to Reproduce

  1. Add videogular to an Angular 10 app
  2. Add a video player to a component
  3. Build the app with ssr

Error init videogular with HLS at VgFullscreenApiService.init Angular 10

Description

I'm having this problem in angular 10 after migrating the code from angular 8 + videogular2 7.0.1(working)

    ERROR TypeError: Cannot read property 'elem' of undefined
    at VgFullscreenApiService.init (videogular-ngx-videogular-core.js:616)
    at VgPlayerComponent.ngAfterContentInit (videogular-ngx-videogular-core.js:1715)

Steps to Reproduce

Angular 10
hls.js "0.14.11

<video #media id="video" [vgMedia]="media" preload="auto" crossOrigin="anonymous" #vgHls="vgHls"
                       [vgHls]="video$.original_payload.video_link"
                       [poster]="video$.thumbnail"
                       (onGetBitrates)="getBit($event)"
                       [controls]="false" [autoplay]="true"
                       controlsList="nodownload nofullscreen"
                       playsinline>
                </video>

I tried to remove the controls, put the controls etc ... without success!

Attachments

Image of https://i.imgur.com/ig8A7m2.jpg

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.