Sto tentando di creare una pagina di test che conterrà un tag HTML5 VIDEO che consentirà la riproduzione di video convertiti. Sono in grado di convertire i video e di memorizzarli localmente sul server, ma mi piacerebbe poter trasmettere tutti i video attraverso un'altra pagina .aspx.Streaming video MP4 tramite .NET HTML5
Supponendo Ho una pagina player.aspx che conterrà il codice HTML e la pagina getvideo.aspx che farà nulla se non fornire il video binario, ho pensato che il seguente codice avrebbe funzionato bene nella mia pagina player.aspx:
<div style="text-align:center">
<video controls autoplay id="video1" width="920">
<source src="http://www.mywebsite.com/getvideo.aspx?getvideo=1" type="video/mp4">
Your browser does not support HTML5 video.
</video>
la pagina di getvideo.aspx contiene il seguente codice vb.net:
Response.clearheaders
Response.AddHeader("Content-Type", "video/mp4")
Response.AddHeader("Content-Disposition", "inline;filename=""newvideo.mp4""")
dim Err as string = ""
Dim iStream As System.IO.Stream
' Buffer to read 10K bytes in chunk:
Dim buffer(buffersize) As Byte
' Length of the file:
Dim length As Integer
' Total bytes to read:
Dim dataToRead As Long
' Identify the file to download including its path.
Dim filepath As String = "./outout/videos/newvideo.mp4"
' Identify the file name.
Dim filename As String = System.IO.Path.GetFileName(filepath)
' Open the file.
try
iStream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
catch ex as exception
throw new exception("Could not create FileStream for [" & filepath & "], error follows." & vbcrlf & ex.toString)
end try
Try
' Total bytes to read:
dataToRead = iStream.Length
' Read the bytes.
While dataToRead > 0
' Verify that the client is connected.
If system.web.httpcontext.current.Response.IsClientConnected Then
' Read the data in buffer
length = iStream.Read(buffer, 0, buffersize)
' Write the data to the current output stream.
system.web.httpcontext.current.Response.OutputStream.Write(buffer, 0, length)
' Flush the data to the HTML output.
system.web.httpcontext.current.Response.Flush()
ReDim buffer(buffersize) ' Clear the buffer
dataToRead = dataToRead - length
Else
'prevent infinite loop if user disconnects
dataToRead = -1
End If
End While
Catch ex As Exception
' Trap the error, if any.
err = "Error accessing " & filepath & " : " & ex.tostring
Finally
If IsNothing(iStream) = False Then
' Close the file.
iStream.Close()
End If
End Try
if err<>"" then throw new exception(err)
Tutto ricevo sul mio output della pagina è un lettore video HTML (giocatore di base di cromo) che sembra timeout e la Il pulsante PLAY diventa grigio. Lo strumento Rete negli strumenti per sviluppatori di Chrome mostra che sta scaricando 45mb e riceve un codice di risposta di 200. Questo mi suggerisce che sta funzionando bene. Anche se ottengo una seconda richiesta GET con lo stato di "Annullato"?
Se visito www.mywebsite.com/output/videos/myvideo.mp4, questo viene riprodotto bene nel browser, quindi so che IIS è configurato per lo streaming video corretto.
Inoltre, se si modifica la disposizione del contenuto di risposta in "allegato", il browser forza correttamente il download del video quando si accede alla pagina ASPX, ma anche questo non viene riprodotto correttamente sul lettore HTML. C'è qualcosa di "intelligente" nel tag HTML5 VIDEO che sta fermando un file .aspx dal servizio di video via .net? O mi manca un'intestazione di risposta?
Grazie!
Continuando a indagare , ancora non ha una risoluzione su questo – JLo