2017-05-28 5 views
1

私はメディアストリーム - https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamで作業しています。ノックアウトでMediaStreamを表示

私は次のことをしようとしている:

<video data-bind="attr: {src: displayedDeviceSession().stream()}"></video> 

映像が表示されませんが。私も無駄(https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject)にsrcObject属性を試してみた

<video data-bind="attr: {src: displayedDeviceSession().stream()}" src="[object MediaStream]"></video> 

:私はこれを参照してください。ノックアウトを活用してダイナミックメディアストリームを表示することは可能ですか?ビデオは

<video id="displayedDeviceSessionVideo"></video> 

をストリーミング表示する

答えて

1

使用computeds。これは、ストリームのプロパティがあり、あなたのモデルに追加されます。

self.stream = ko.observable(); 

self.streamWatch = ko.computed(function() { 
    var video = document.getElementById("displayedDeviceSessionVideo"); 
    if (self.stream() != null) { 
     // Start Stream 
     video.srcObject = self.stream(); 

    } else { 
     // Stop 
    } 
}, self); 

私はあなたが何をしているかと考えていることは正しいが、複雑になりますインラインhtmlを行ったので、jsモデル自体のノックアウトの力を使用します。ブラウザは、指定されたオーディオ/ビデオを探し始めたときに

ビデオはもともとレンダリングされていない場合は、なぜ<video onloadstart="loadStream()">

function loadStream() { 
    var video = document.getElementById("displayedDeviceSessionVideo"); 
    if (viewModel.stream() != null) { 
     // Start Stream 
     video.srcObject = viewModel.stream(); 

    } else { 
     // Stop 
    } 
} 

を使用していないloadstartイベントが発生します。これは、ロード処理が開始されるときです。

リファクタリングコードですので、変更された場合でも計算されたストリームが更新されます。

はこれをテストしていませんが、理論的にはこれも動作し、したがって、すべてのノックアウトする必要があります

<video data-bind="event: { onloadstart: loadStream }"> 

モデル:

self.stream = ko.observable(); 

self.loadStream = function() { 
    var video = document.getElementById("displayedDeviceSessionVideo"); 
    if (self.stream() != null) { 
     // Start Stream 
     video.srcObject = self.stream(); 
    } else { 
     // Stop 
    } 
} 

self.streamWatch = ko.computed(function() { 
    var stream = self.stream(); 
    self.loadStream(); 
}, self); 
+0

このアプローチについての私の心配だけの事はあるvideo要素の場合ストリームの更新時には表示されません。私は、これを避けるために要素にバインドする何らかの方法があることを願っています...ここに必要なカスタムバインディングはありますか? – SB2055

+0

おかしい、これを書いて、私は最後に余分なビットを持っていた、これはそこに存在する要素に依存していると言いました。余分なロジックを置くことができます。 stream.valueHasMutated()。しかし、ビデオ要素またはラップされたノックアウト 'ifs'を動的に追加する場合にのみ必要です。 –

+0

ええええええええええええええええええええええええええええええええええええええええええええばらん - ええ、 'hasMutated'を私の観察可能なものすべてと結びつけ、それを私のテンプレートロジックに取り入れることは解決策ですが、(維持管理、可読性、優雅さなど)私は興奮していません。 – SB2055

関連する問題