Директива для загрузки видео файла в ng-repeat

0

У меня есть директива, над которой я работаю, которая загрузит видео, расположенное в Azure Media Services, в Dash Player и сыграет. Будет загружено несколько видео, поэтому мне нужно загрузить его в ng-repeat, вот html, который имеет основной цикл

<div class="row">
     <div class="col-xs-6 col-sm-4 monster-admin-video-wrapper" ng-repeat="video in vm.videos | orderBy: 'Title' | filter: VideoFilter ">
           <ng-azuremediaplayer hideapprove="true"></ng-azuremediaplayer>
     </div>
 </div>

и Директивой

app.directive('ngAzuremediaplayer', function ($compile) {
    return {
        restrict: 'AE',
        link: function (scope, elem, attrs) {
            scope.hideapprove = attrs.hideapprove;
            scope.hidereject = attrs.hidereject;
            scope.hideinfo = attrs.hideinfo;
            scope.hidedelete = attrs.hidedelete;

        },
        templateUrl: '/app/templates/VideoControl.html',
    }
});
});

И, наконец, файл шаблона

<div class="monster-admin-video monster-section-link">
<div class="monster-card">
    <div class="monster-card-content">
        <h5 class="monster-card-title" style="margin-top: 5px;">{{video.ChannelName}}</h5>
    </div>
    <div class="monster-admin-video-player embed-responsive embed-responsive-16by9" id="">
        <video id="{{video.RowKey }}" class="azuremediaplayer amp-default-skin amp-big-play-centered embed-responsive-item" controls data-setup='{"logo": { "enabled": false }, "techOrder": ["azureHtml5JS", "flashSS", "silverlightSS", "html5"], "nativeControlsForTouch": false}'>
            <source src="{{vm.trustSrc(video.BlobUri)}}"  />
            <p class="amp-no-js">
                To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
            </p>
        </video>       
    </div>
    <div class="monster-admin-action-buttons" style="margin-top: 10px;">
        <a class="btn text-success" ng-hide="hideapprove" ng-click="vm.approve(video)"><i class="fa fa-check-circle-o"></i></a>
        <a class="btn text-warning" ng-hide="hidereject" ng-click="vm.reject(video)"><i class="fa fa-times-circle"></i></a>
        <a class="btn text-info" ng-hide="hideinfo" ng-click="vm.info(video)"><i class="fa fa-info-circle"></i></a>
        <a class="btn text-danger" ng-hide="hidedelete" ng-click="vm.delete(video)"><i class="fa fa-trash"></i></a>
    </div>
    <div class="monster-admin-video-caption">
        <p> {{video.EncodingStatus}}</p>
        <p class="lead monster-admin-video-title" ng-bind="video.Title" data-ellipsis></p>
        <p class="monster-admin-video-desc" ng-bind="video.Description" data-ellipsis></p>
    </div>
</div>

Этот код не работает (я прочитал, что установка источника, подобного этому, может быть затруднена. Я хочу, чтобы можно было добавить проигрывателя программно в тег видео, что-то вроде

var player = dashjs.MediaPlayer().create();
player.initialize(document.getElementById(scope.video.RowKey), scope.video.SaSLocator, false);

Таким образом, видео будет загружаться должным образом во время выполнения. У меня возникли проблемы с подключением всего этого (с использованием директивы, увлажнения файла шаблона и установки источника) в одно и то же время. Я был бы признателен за небольшое руководство по этому вопросу и при необходимости может обновить код.

Теги:
angularjs-directive
azure-media-services

1 ответ

0

видео-list.template.html

<ul>
  <li ng-repeat="video in 
[{id:'a42',videosrc:'//amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest'}, 
{id:'a43',videosrc:'//amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest'}]
">
    <video id="{{video.id}}" class="azuremediaplayer amp-default-skin amp-big-play-centered" tabindex="0"> </video>
    <ampscript id="{{video.id}}" videosrc="{{video.videosrc}}"></ampscript>
  </li>
</ul>

код, который регистрирует пользовательский указатель. Он использует id и источник видео в качестве параметров и инициализирует медиа-плеер azure. $ timeout используется, потому что вы хотите убедиться, что репитер закончил рендеринг.

angular.module('directives', []).directive('ampscript',
  function ($timeout) {
    return {
      model: {
        id: '@',
        videosrc: '@'
      },
      link: function ($scope, element, attrs, controller) {
        var myOptions = {
          autoplay: false,
          controls: true,
          width: "640",
          height: "400",
          poster: ""
        };

        $timeout(function () {

          var myPlayer = amp(attrs.id, myOptions);
          myPlayer.src([{ src: "" + attrs.videosrc, type: "application/vnd.ms-sstr+xml" },]);
        });
      }
    };
  }
);

Не забудьте указать правильные ссылки в index.html:

<link href="https://amp.azure.net/libs/amp/latest/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet">
<script src="https://amp.azure.net/libs/amp/latest/azuremediaplayer.min.js"></script>

Надеюсь, это поможет вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню