• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pobieranie strumieniowe

Object Storage Arubacloud
+1 głos
332 wizyt
pytanie zadane 9 marca 2019 w C# przez Ilmefy Obywatel (1,950 p.)

Dobry wieczór. Poszukuję wskazówek które pozwoliłyby mi na pobieranie pliku wideo/muzycznego strumieniowo. Narazie próbowałem pobierania danych za pomocą WebRequest.GetResponse itd aż do zapisu do tablicy bitów. 

            HttpWebRequest request;
            const int bytesToGet = 2000000;
            request = WebRequest.Create(VideoURL) as HttpWebRequest;
            using (WebResponse response = request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    byte[] bytes = new byte[bytesToGet];
                    int count = stream.Read(bytes, 0, bytesToGet);
                    File.WriteAllBytes(@"C:\Users\!!!\Desktop\NazwaPliku.mp4", bytes);
                }
            }

niestety plik zapisany w ten sposób (co zrozumiałe) nie działa. 

Bardzo proszę o podpowiedzi w jaki sposób powinienem pobierać plik aby być w stanie podzielić go na części aby móc oglądać zanim pobiorę cały film.

komentarz 9 marca 2019 przez jankustosz1 Nałogowiec (35,880 p.)
Czyli pobiera Ci plik a potem nie możesz go odtworzyć?

Czym go odtwarzasz?
komentarz 9 marca 2019 przez Ilmefy Obywatel (1,950 p.)
Starałem się otworzyć pobrany plik zwykłym odtwarzaczem multimedialnym na win10

2 odpowiedzi

0 głosów
odpowiedź 10 marca 2019 przez NowyUrzydgownig Mądrala (5,090 p.)
wybrane 10 marca 2019 przez Ilmefy
 
Najlepsza
            HttpWebRequest request;
            const int bytesToGet = 2000000;
            request = WebRequest.Create(VideoURL) as HttpWebRequest;
            using (WebResponse response = request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                using (Stream fileStream = File.OpenWrite(downloadPath + "/filmik.mp4"))
                {
                    byte[] bytes = new byte[bytesToGet];
                    int count = stream.Read(bytes, 0, bytesToGet);
                    while (count > 0)
                    {
                        fileStream.Write(bytes, 0, count);
                        count = stream.Read(bytes, 0, bytesToGet);
                    }
                }
            }

O to poprawiona wersja twojego kodu. Robisz dwa błędy. Pierwsze, to próbujesz pobrać za jednym razem całą zawartość pliku. Drugi błąd to zapisywanie nadmiarowej ilości bajtów do pliku.

0 głosów
odpowiedź 9 marca 2019 przez jankustosz1 Nałogowiec (35,880 p.)
Chyba widzę Twój błąd.

Wpisujesz całą tablicę bytes do pliku, a przecież powinieneś wpisać tylko od 0 do count z tej tablicy.
komentarz 9 marca 2019 przez Ilmefy Obywatel (1,950 p.)
Ale jeśli pobieram określoną ilość bajtów to nie powinno automatycznie wybrać właśnie tej wartości ? Jaka funkcja powinienem w takim razie spróbować to zapisać?
komentarz 9 marca 2019 przez jankustosz1 Nałogowiec (35,880 p.)
edycja 9 marca 2019 przez jankustosz1
Załóżmy że chcą Ci przesłać 5mb. Tworzysz o jakimś tam dużym rozmiarze tablicę, strumień wpakowuje do niej 5mb a reszty nie tyka. A potem zapisujesz całą tą tablicę do pliku, razem z tym wolnym miejscem na końcu które zostało.
komentarz 9 marca 2019 przez jankustosz1 Nałogowiec (35,880 p.)
Odnośnie tego jaka funkcja to możesz używać FileStream i Write i własną napisać. Albo zrobić subarray o wielkości count.

Podobne pytania

0 głosów
0 odpowiedzi 245 wizyt
pytanie zadane 1 kwietnia 2019 w C# przez Ilmefy Obywatel (1,950 p.)
0 głosów
3 odpowiedzi 377 wizyt
pytanie zadane 12 stycznia 2016 w C# przez wost Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 55 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...