Aplikacja sieciowa. Przesyłanie obrazu.

0

Witam wszystkich.
Chciałem napisać aplikację sieciową, która będzie przesyłała z jednego kompa na drugi obraz z kamerki internetowej(na początku w sieci LAN). Próbuje od dłuższego czasu zgłębić temat. Udało mi się napisać proste aplikacje typu czat lecz niestety zupełnie nie wiem jak zabrać się za przesyłanie obrazu. Czy ktoś mógłby mi wskazać drogę? O czym należałoby przeczytać aby móc zrealizować pomysł? W co należałoby się wgłębić i co należałoby postudiować?
Za wszelkie informację serdeczne dzięki

0

Jak od samego dna chesz sie tym zajac to polecam hasla

Video streaming
QoS
Protokoly

troche prosciej

DirectX

i najprosciej, lapac ramki i przesylac jako HTTP (np. na innym porcie)

0

Właśnie. Zastanawiałem się, jak wykorzystać protokół HTTP do tego celu? Jak wyłapać te ramki? Bo to by było banalne rozwiązanie.
Najprościej byłoby przesyłać print screen ekranu w odpowiedniej częstotliwości. Jednak to jest bardzo ograniczone rozwiązanie

0

1) Komponent umozliwiajacy zlapanie ramki (google: video get frame c#)

2) Prosty serwer WWW (google: c# simple http server)

3) Klient pobierajacy obrazek (google: c# download image web)

a wlasciwie to wystarczy pewnie codeproject, klikanie w linki (jeden guzik myszy) + 3 klawisze Ctrl, c, v

Ale pamietaj, ze to badziewne rozwiazanie.

0

Ekstra. Dzięki wielkie za podpowiedź. Co do tego, że to badziewne rozwiązanie to wiem:) ale warto od takich zaczynać.
Jeszcze raz dzięki. Pozdrawiam

0

Czemu nie streaming? DirectX tutaj bardzo pomoże, podejrzewam że to nie będzie aż tak trudne jak się wydaje.

0
public class Urzadzenie
    {
        #region Stale_API
        private const short WM_CAP = 0x400;
        private const int WM_CAP_DRIVER_CONNECT = 0x40a;
        private const int WM_CAP_DRIVER_DISCONNECT = 0x40b;
        private const int WM_CAP_EDIT_COPY = 0x41e;
        private const int WM_CAP_SET_PREVIEW = 0x432;
        private const int WM_CAP_SET_OVERLAY = 0x433;
        private const int WM_CAP_SET_PREVIEWRATE = 0x434;
        private const int WM_CAP_SET_SCALE = 0x435;
        private const int WS_CHILD = 0x40000000;
        private const int WS_VISIBLE = 0x10000000;
        #endregion

        #region Funckcje_API
        [DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")]
        public static extern int capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);

        [DllImport("user32", EntryPoint = "SendMessage")]
        public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);

        [DllImport("user32", EntryPoint = "OpenClipboard")]
        public static extern int OpenClipboard(int hWnd);

        [DllImport("user32", EntryPoint = "EmptyClipboard")]
        public static extern int EmptyClipboard();

        [DllImport("user32", EntryPoint = "CloseClipboard")]
        public static extern int CloseClipboard();

        [DllImport("user32", EntryPoint="SetWindowPos")]
        protected static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);

        [DllImport("user32", EntryPoint="DestroyWindow")]
        protected static extern bool DestroyWindow(int hwnd);
        #endregion

        int uchwyt_urzadzenia=0;
        int indeks = 0;

        public void Inicjalizacja(int wysokosc, int szerokosc, int uchwyt)
        {
            string indeks_urzadzenia = Convert.ToString(this.indeks);
            uchwyt_urzadzenia = capCreateCaptureWindowA(indeks_urzadzenia, WS_VISIBLE | WS_CHILD, 0, 0, wysokosc, szerokosc, uchwyt, 0);
            SendMessage(uchwyt_urzadzenia, WM_CAP_DRIVER_CONNECT, 0, 0);
            SendMessage(uchwyt_urzadzenia, WM_CAP_SET_SCALE, -1, 0);
            SendMessage(uchwyt_urzadzenia, WM_CAP_SET_PREVIEWRATE, 0x42, 0);
            SendMessage(uchwyt_urzadzenia, WM_CAP_SET_PREVIEW, -1, 0);

            SetWindowPos(uchwyt_urzadzenia, 1, 0, 0, szerokosc, wysokosc, 6); //ustawienia wyświetlania
        }

        public void PokazOkno(global::System.Windows.Forms.Control okno)
        {
            Inicjalizacja(okno.Height, okno.Width, okno.Handle.ToInt32());
        }

        public void Stop()
        {
            SendMessage(uchwyt_urzadzenia,WM_CAP_DRIVER_DISCONNECT,0,0);
            DestroyWindow(uchwyt_urzadzenia);
        }

    }

Podstawowy kod

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0