O vídeo do HTML5 não está a funcionar com a marca AngularJS ng-src

AngularJS ng-src não funciona com o elemento de Vídeo HTML5 neste violino: http://jsfiddle.net/FsHah/5/

olhando para o elemento de vídeo, a tag src está sendo preenchido com o URI src correto, mas o vídeo não toca.

Isto é não suportado em AngularJS , Qual é a solução para isto?

Author: qais, 2013-03-31

11 answers

Basta criar um filtro:

app.filter("trustUrl", ['$sce', function ($sce) {
        return function (recordingUrl) {
            return $sce.trustAsResourceUrl(recordingUrl);
        };
    }]);

No Ficheiro Ver:

<audio src="{{Your_URL | trustUrl}}" audioplayer controls></audio>
 45
Author: Sdd Sdei, 2015-07-09 09:35:07
Isto parece ser um erro em AngularJS: https://github.com/angular/angular.js/issues/1352

Substituir a fonte por {[[0]} parece ser a única maneira de, no momento, pelo menos, carregar uma fonte no vídeo. Esperemos que alguém apareça para resolver isto ou para dar uma solução de algum tipo.

 7
Author: dk123, 2013-05-22 13:52:22
Para reproduzir o vídeo, usei o seguinte método: tenha um botão chamado play e no ng-click do botão você tem que escrever este
 var myVideo = document.getElementsByTagName('video')[0];
myVideo.src = vidURL;
myVideo.load();
myVideo.play();

Para reproduzir vídeo no ng-repetir a utilização índice . espero que ajude.

 7
Author: kavinhuh, 2015-02-27 15:00:08
A minha resposta está alguns anos atrasada, mas isto é para quem ainda procura uma solução. Eu tinha o mesmo problema. Lembrei - me que o Youtube exibe os seus vídeos embutidos usando um tag-iframe diferente. Apliquei as propriedades que queria e funcionou.

<iframe width="560" height="300" ng-src="{{ video }}" frameborder="0" allowfullscreen controls></iframe>

Para qualquer pessoa nova em AngularJS, a mira é de $scope.variável de vídeo no controle para esta página que tem o caminho para o vídeo.
 4
Author: Soubriquet, 2014-10-10 23:08:40

Remova a marca de origem da marca de vídeo e tente isto..

<video controls preload=auto ng-src="{{videoURL| trustUrl}}" poster="{{thumbnailUrl}}"></video>

E na sua aplicação angular crie um filtro como este

 app.filter("trustUrl", function($sce) {
            return function(Url) {
                console.log(Url);
                return $sce.trustAsResourceUrl(Url);
            };
        });
 3
Author: saurabh yadav, 2017-08-29 07:38:11
Tentei com o ajax call e não parece funcionar. enquanto vejo a mira.src tem o valor correto após a chamada ajax, ng-src não recebe a atualização. Já tentei, desconto de tempo com aplicação e não fiz nada. Alguém consegue resolver este problema?
 2
Author: CodeOverRide, 2014-01-13 20:04:28

Solução de trabalho

No controlador

$scope.mp3 = "http://download.jw.org/audio.mp3"

$scope.$watch('mp3', function() {
       $("audio").attr("src",$scope.mp3)
   });

Html:

<audio id="mejs" type="audio/mp3" controls="controls"></audio>
 2
Author: Dario Agliottone, 2014-07-23 22:43:09
Isto é uma precaução de segurança padrão em AngularJS. Por favor, veja os detalhes: https://docs.angularjs.org/api/ng/service / $sce

Para desactivar a' fuga Contextual estrita', pode definir isto na sua aplicação.ficheiro js

angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
      // Completely disable SCE.  For demonstration purposes only!
      // Do not use in new projects.
      $sceProvider.enabled(false);
    });
No entanto, não recomendam. Mas você pode usar para um controlador especial como este:
var myAppControllers = angular.module('myAppControllers', []); ScorpAppControllers.controller('HomeCtrl', ['$scope', 'Home',    function ($scope, Home) {
$scope.Home = Home.query(); }]).config(function($sceProvider) {
$sceProvider.enabled(false); });
 2
Author: nesimtunc, 2015-04-16 09:57:32

Pode usar o Módulong-media .

angular.module('app', ['media'])
    .controller('mainCtrl', function($scope) {
        
        $scope.videoSources = [];
        
        $scope.loadVideos = function() {
            $scope.videoSources.push('http://www.w3schools.com/html/mov_bbb.mp4');
            $scope.videoSources.push('http://www.w3schools.com/html/mov_bbb.webm');
        };
    });
<div ng-app='app'>
  <div ng-controller='mainCtrl'>        
    <video html5-video='{{ videoSources }}'
        autoplay='true' controls='true'>
    </video>
    <br>
    <a href="#" ng-click='loadVideos()'>Load videos</a>
  </div>
</div>

<script src="https://code.angularjs.org/1.3.15/angular.js"></script>
<script src="http://caitp.github.io/ng-media/ng-media.js"></script>

Plunker .

 1
Author: Muhammad Reda, 2015-05-04 07:26:18
Basta usar vanilla js (JavaScript normal) para fazer isto funcionar. Se você está ouvindo eventos como onended você pode querer reconsiderar usando $scope.$aplicar().

O meu exemplo:

document.getElementById('video').src = $scope.videos[$scope.videoindex];
 0
Author: Marc, 2015-04-24 13:17:48

Acho que o que está a acontecer é que o Angular preenche os atributos {[[1]} depois de os e elementos terem sido adicionados à página, para que o navegador Veja os elementos com URLs quebrados. Eu trabalhei em torno dele usando ng-if:

        <video muted ng-if="foo" loop autoplay>
            <source ng-src="{{foo.media.mp4.url}}">
            <source ng-src="{{foo.media.webm.url}}" type="video/webm">
            <img ng-src="{{foo.media.gif.url}}">
        </video>

Isto faz com que o elemento ligado à existência de foo, que é uma variável de escopo sendo povoado através da chamada AJAX.

 0
Author: Seán Hayes, 2016-06-29 18:18:41