6

बंद कर दिया है मेरे पास एएसपीनेट वेबफॉर्म एप्लिकेशन है और varbinary प्रारूप में सहेजे गए डेटाबेस से वीडियो पुनर्प्राप्त करने के लिए और इसे HTML5 वीडियो टैग के रूप में दिखाएं।Stream.WriteAsync फेंकता है रिमोट होस्ट ने कनेक्शन अपवाद

एक Googled यह करने के बाद, मैं एक तरीका है कि मैं अतुल्यकालिक रूप से ASP.Net WebApi का उपयोग कर इसे खेलना चाहिए पाया, यह ठीक

सबसे पहले समस्या से काम करता है

जब वीडियो पहली बार और करने के लिए प्ले बटन पर उपयोगकर्ता क्लिक खेला वीडियो को रीप्ले करें, The remote host closed the connection. The error code is 0x800704CD अपवाद await outputStream.WriteAsync(buffer, 0, bytesRead); पर अपवाद फेंकता है।

दूसरी समस्या

सीक बार पर उपयोगकर्ता क्लिक करें, वीडियो पहले से खेला के लिए चला जाता है।

नोट

Internet Explorer 11 किसी भी समस्या के बिना वीडियो निभाता है, लेकिन फ़ायरफ़ॉक्स और क्रोम दोनों समस्याएं हैं।

मैं इस समस्या को कैसे हल कर सकता हूं?

यहाँ मेरी कोड है:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.EnableCors(); 

     config.MapHttpAttributeRoutes(); 

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

public class VideoController : ApiController 
{ 
    public IVideoRepository videoRepository; 

    public HttpResponseMessage Get(long id) 
    { 
     try 
     { 
      videoRepository = new VideoRepository(); 
      Video video = videoRepository.load(id); 

      if (video != null) 
      { 
       var videoStream = new VideoStream(video.fileContent); 
       string ext = video.extension; 

       var response = Request.CreateResponse(); 

       response.Content = new PushStreamContent((Action<Stream, HttpContent, TransportContext>)videoStream.WriteToStream, new MediaTypeHeaderValue("video/" + ext)); 

       response.Content.Headers.Add("Content-Disposition", "attachment;filename=" + video.fullName.Replace(" ", "")); 
       response.Content.Headers.Add("Content-Length", videoStream.FileLength.ToString()); 

       return response; 
      } 
      else 
      { 
       return Request.CreateResponse(HttpStatusCode.NotFound); 
      } 
     } 
     catch (Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, e); 
     } 
    } 
} 

public class VideoStream 
{ 
    private readonly byte[] _fileContent; 
    private long _contentLength; 

    public long FileLength 
    { 
     get { return _contentLength; } 
    } 

    public VideoStream(byte[] content) 
    { 
     _contentLength = content.Length; 
     _fileContent = content; 
    } 

    public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context) 
    { 
     try 
     { 
      var buffer = new byte[65536]; 

      MemoryStream memoryStream = new MemoryStream(); 
      memoryStream.Write(_fileContent, 0, _fileContent.Length); 
      memoryStream.Position = 0; 
      using (memoryStream) 
      { 
       var length = (int)memoryStream.Length; 
       var bytesRead = 1; 

       while (length > 0 && bytesRead > 0) 
       { 
        bytesRead = memoryStream.Read(buffer, 0, Math.Min(length, buffer.Length)); 
        await outputStream.WriteAsync(buffer, 0, bytesRead); 
        length -= bytesRead; 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
     finally 
     { 
      outputStream.Close(); 
     } 
    } 
} 

अद्यतन

इस तरह के बाद ठीक से काम नहीं किया था, मैं this way उपयोग करने के लिए किया था, लेकिन उपयोगकर्ता पर क्लिक करते हैं नया तरीका, seekbar समस्या है उस समय की तलाश करने के लिए बार तलाशें जो क्रोम और फ़ायरफ़ॉक्स में काम नहीं करता है।

उत्तर

0

एएसपी.NET वीडियो स्ट्रीमिंग पर बहुत अच्छा नहीं है। थर्ड-पार्टी वीडियो स्ट्रीमिंग समाधान सबसे अच्छा विकल्प है।

कुछ वीडियो स्ट्रीमिंग सर्वर हैं (जैसे Wowza), लेकिन उन्हें स्थापना की आवश्यकता है और आपको लाइसेंस खरीदना होगा।

क्लाउड स्ट्रीमिंग सेवा एक और विकल्प है। मैं व्यक्तिगत रूप से AWS Cloudfront पसंद करता हूं। वे विभिन्न विश्व स्तर पर वितरित सामग्री वितरण क्षेत्रों में वितरण का प्रस्ताव देते हैं। यह वास्तव में सस्ता खर्च करता है और आप यह सुनिश्चित कर सकते हैं कि यह किसी भी यातायात राशि से बच जाएगा (भले ही आपके सभी उपयोगकर्ता एक ही वीडियो को एक साथ देखेंगे)।

संबंधित मुद्दे