2017-06-17 1 views
0

Ich versuche, ein gutes Muster, um herauszufinden, folgendes zu erreichen:ASP.NET MVC-Stream Text src Tag

<video width="640" height="480" controls> 
    <source src="@Model.MeetingVideo" type="video/mp4"> 
    <track kind="subtitles" label="English subtitles" src="@Model.Subtitles" srclang="en" default/> 
</video> 

Ich mag den src Text in meinem Viewmodel speichern können (@Model.Subtitles) und es angezeigt haben.

Es ist nur Textinhalt. Normalerweise sind diese Untertiteldateien statische Textdateien.

Aus irgendeinem Grund funktioniert die obige Vorgehensweise nicht.

Ich sehe nicht die Untertitel erscheinen.

Ich glaube, ich mache etwas falsch ... glaube, ich brauche eine Art Streaming-Technik, um den Text auf das src-Attribut zu streamen.

Irgendwelche Ideen oder Vorschläge?

Danke,

Philip

Antwort

2

So src erwartet einen URI. Wie wäre es mit der Codierung der Daten als data URI?

public static string GetDataUri(string text, string contentType) 
{ 
    var bytes = Encoding.UTF8.GetBytes(text); 
    var b64String = Convert.ToBase64String(bytes); 

    //the old way 
    //var dataUri = string.Format("data:{0};base64,{1}", contentType, b64String); 

    //C#6.0 and above 
    var dataUri = $"data:{contentType};base64,{b64String}"; 

    return dataUri; 
} 

erzeugen dann den URI

//maybe subs have a different content type? I don't know 
var subtitleSrc = GetDataUri(theText, "text/plain"); 

und es in das Modell erhalten und den Wert direkt als src für Ihr track Element verwenden.

Wenn ich es wäre, würde ich src = "@Html.Raw(theDataUri)" aus Ihrer Sicht verwenden, so dass der Rasierer nicht versucht, sich vor dem Rendern in die Zeichenfolge einzumischen.