23 messaggi dal 16 giugno 2014
Su una applicazione WEB (non MVC) volevo implementare una pagina che faccia vedere un video proveniente da una applicazione Android, praticamente vedere quello inquadrato da una telecamera di uno smarphone.

Sto andando per gradi. Ad esempio sono riuscito ad aprire un socket da un client (sia ASP NET che Android) e riesco a farlo "parlare" con l'applicazione WEB asp.net.

Il passo successivo sarebbe quello di inviare il video in streaming e farlo vedere su una pagina web. A tal proposito ho trovato un esempio, che permette di fare questo,composto da tre parti.


Una classe che legge un video locale e lo trasmette in streaming alla stessa applicazione, in modo che quando funziona, questa parte sarà sostituita da un socket in ascolto.

Una configurazione sul global.asax nella sezione application start, così composta:

GlobalConfiguration.Configure(config =>
{
config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
});

Che di fatto attiva il tag posto sulla maschera, nel ricevere il flusso video in streaming

<video id="video" class="dtm-video-element" preload="auto">
<source src="api/Video" type="video/mp4" />
</video>

e infine l'APIController che produce il video, così fatto:

public class VideoController : ApiController
{

protected Logger log = new Logger();
public HttpResponseMessage GetVideoContent()
{
var httpResponse = Request.CreateResponse();
httpResponse.Content = new PushStreamContent((Action < Stream, HttpContent, TransportContext > ) WriteContentToStream);
log.WriteDebug(this.ToString() + " - HttpResponseMessage ");
return httpResponse;
}
public async void WriteContentToStream(Stream outputStream, HttpContent content, TransportContext transportContext)
{
int i = 0;
try
{
//path of file which we have to read//
var filePath = HttpContext.Current.Server.MapPath("~/log/esempio.mp4");
log.WriteDebug(this.ToString() + " - WriteContentToStream filePath: " + filePath);

//here set the size of buffer, you can set any size
int bufferSize = 10000;
byte[] buffer = new byte[bufferSize];
//here we re using FileStream to read file from server//
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
int totalSize = (int)fileStream.Length;
/*here we are saying read bytes from file as long as total size of file
is greater then 0*/
log.WriteDebug(this.ToString() + " - WriteContentToStream totalSize: " + totalSize.ToString());
while (totalSize > 0)
{
i++;
//log.WriteDebug(this.ToString() + " - WriteContentToStream totalSize: " + totalSize.ToString());
int count = totalSize > bufferSize ? bufferSize : totalSize;
//here we are reading the buffer from orginal file
int sizeOfReadedBuffer = fileStream.Read(buffer, 0, count);
//here we are writing the readed buffer to output//
await outputStream.WriteAsync(buffer, 0, sizeOfReadedBuffer);
//and finally after writing to output stream decrementing it to total size of file.
totalSize -= sizeOfReadedBuffer;
}
}
}
catch (Exception ex)
{
log.WriteError("VideoController.WriteContentToStream - Errore: " + ex.Message);
}
log.WriteDebug(this.ToString() + " - WriteContentToStream FINITO iterazioni: " + i.ToString());
}
}


Quando la maschera si apre, effettivamente il controllo invia il flusso video, ma sulla maschra non si vede nudda!


Qualche idea?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
purtroppo non è così semplice. Fare streaming richiede l'uso di un protocollo di streaming e di un server di streaming, non puoi semplicemente scrivere i dati grezzi in un mp4 e servirli col progressive download come se si trattasse di un video on-demand.

Ti consiglio di usare WebRTC per fare streaming peer-to-peer tra browser mobile e browser desktop. Dovrebbero esistere delle demo. Prova con questo. Io non l'ho mai provato ma se funziona fammi sapere perché è interessante.
https://peerjs.com/
Lì ti spiega anche come installare un server nodejs che farà da broker per i peer connessi.

Qui trovi delle informazioni generali su WebRTC.
https://webrtc.org/

ciao,
Moreno
Modificato da BrightSoul il 27 settembre 2018 00.16 -

Enjoy learning and just keep making
23 messaggi dal 16 giugno 2014
Grazie 1000
Ora gli do un'occhiata.

In effetti il dubbio che il file debba essere "preparato", mi era venuto.

Se riesco metto la soluzione a beneficio di qualcun altro.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.