Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

webcam trasmision remota
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: webcam trasmision remota Responder citando

Ya revise en la opcion buscar todos los "post" referenets a video

y les indico lo que he logrado el dia de hoy

**Aplicacion Servidor "simulado" rustico Confused

1) Abrir dispositivo web cam y colocarlo en un panel dentro de una ventana
2) Captura cada cierto tiempo (timer) un frame y guardarlo com bitmap

**Aplicacion Cliente mas rustica todavia Confused

VEntana que leee cada cierto tiempo el fichero *.bmp generado por la
apliacacion Servidor , esto obiamnte funmciona atravez de una rd local
compartiendo la carptea donde esta la imagen Embarassed

Entiendo que lo que hice no es NADA OPTIMO y consume recursos como idiota pero bueno es lo que logre hacer luego de 4 horas de investigacion
y nada en internet sobre el manejo de streams y la ayduaa del builder en esos temas es muy pobre

SOLICITO SU SU AYUDA DE LAS MANERA MAS HUMILDE (leo, rpocar, rb y los demas gurus)

para convertir este programa a trasmision por medio de un tmemorystream y serversocket y clientesocte o com se llame
para poder hacerlo via internte, asumiendo que posteriorremte
comprima la imagen a un formato jpg para la trasmision del mismo
o mpg

AYUDA PLZ!!!
Volver arriba
Mensaje    Asunto: Responder citando

Hola.
Como ya habrás visto en el foro, yo conseguí enviar una imagen (sin necesidad de guardarla en un fichero) usando los componentes NMStrm y NMStrmServ y en una red local.
Cuando intenté hacerlo con las imagenes de la camara web (30 frames/sec) e intentando usar el localhost, se me colgó el programa. Ahora lo tengo parado por otras prioridades. Si consigues hacer algo postealo, please.

Que componente usas para la captura de la webcam?? Yo el ImageEn porque no encontré que tuviese una función que devolviese los frames.
Salu2.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No me gusta instalr componentes externos ya que luego es nu problema distribuirlos (solo cuando sea algo muy complicado como un id telefonico o algo asi)

Utilizamos el api de windows

capFileSaveDIB (hwndVideo, FileName);

Pego el componente completo aqui para que uses

Enviem el codigo parfa enviar sin guardar en archivo plz

Código:

//---------------------------------------------------------------------------
/*
 * Copyright (c) Allan Petersen, 2001.
 * This is a tutorial for a simple capture system using the win32 api
 * for accessing your webcam
 *
 * (c) Copyright 2001, Allan Petersen
 * ALL RIGHTS RESERVED
 *
 * Contact Allan Petersen at <support@allanpetersen.com> or visit
 * www.allanpetersen.com
 *
 */
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <stdio.h>
#include "c_cap.h"
#include "ServerVideo.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)

__fastcall TCap::TCap (HWND Handle)
{
    // create video capture window
    ParentHandle = Handle;
    hwndVideo = capCreateCaptureWindow(
                    (LPSTR) "My Capture Window",
                    WS_CHILD | WS_VISIBLE,
                    0, 0, 300, 200,
                    frmServerVideo->panelCaptura->Handle,
                    (int) 0);

              /*      w = capCreateCaptureWindow("Mi Video",
                    WS_CHILD | WS_VISIBLE,
                       1, 1, 320, 240,
                       Panel1->Handle, 0); */


    pStringCapDrivers = new TStringList;
    SelectedDevice = -1;
}


__fastcall TCap::~TCap ()
{

    delete pStringCapDrivers;

    capPreview(hwndVideo, FALSE); // end preview
    capDriverConnect(hwndVideo, SelectedDevice);
    capDriverDisconnect(hwndVideo); // disconnect from driver
}

//---------------------------------------------------------------------------
// enumerate the installed capture drivers
//---------------------------------------------------------------------------
int TCap::EnumCapDrv ()
{
   char szDeviceName[80]; // driver name
   char szDeviceVersion[80]; // driver version
   char str[161]; // concatinated string
   int xcap; // counter

    xcap = 0;
    pStringCapDrivers->Clear ();
    do  {
        if (capGetDriverDescription(xcap, szDeviceName, sizeof(szDeviceName),
                           szDeviceVersion, sizeof(szDeviceVersion))){

            sprintf (str, "%s, %s", szDeviceName, szDeviceVersion);
            pStringCapDrivers->AddObject (str, (TObject *)xcap);
            }
        else {
            break;
            }
        xcap++;
        } while (true);

    return 0;
}

//---------------------------------------------------------------------------
//  connecting to selected device and starts preview
//---------------------------------------------------------------------------
void TCap::Connect (int Selected)
{
    CAPSTATUS CapStatus;
    int       hsize;

      // capDlgVideoDisplay(hwndVideo);
      // connect to the driver
    if (SelectedDevice != -1) {
        capPreview (hwndVideo, FALSE);
        capDriverConnect(hwndVideo, SelectedDevice);
        }

    if (!capDriverConnect(hwndVideo, Selected)) {
        // ---- Unable to connect to driver
        return;
        }

    // update the driver capabilities
    capDriverGetCaps (hwndVideo, sizeof(CAPDRIVERCAPS), &CapDrvCaps);

    capDlgVideoFormat(ParentHandle);

    // Are there new image dimensions
    capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));

    hsize = GetSystemMetrics(SM_CYMENU);
    hsize += GetSystemMetrics(SM_CYCAPTION);

    // ---- Rescaling the windows
    SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
    SetWindowPos(ParentHandle, NULL, 0, hsize, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight+hsize, SWP_NOZORDER | SWP_NOMOVE);

    // set preview rate to 33.3 miliseconds, or 30 FPS
    capPreviewRate (hwndVideo, 33.3);

    // start preview video
    capPreview (hwndVideo, TRUE);

    // ---- Remember selected device
    SelectedDevice = Selected;
}

//---------------------------------------------------------------------------
//  Get access to the video source format box
//---------------------------------------------------------------------------
void TCap::Format ()
{
    int       hsize;

    CAPSTATUS CapStatus;

    capDlgVideoFormat(hwndVideo);
    // Are there new image dimensions
    capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));

    hsize = GetSystemMetrics(SM_CYMENU);
    hsize += GetSystemMetrics(SM_CYCAPTION);

    SetWindowPos(ParentHandle, NULL, 0, hsize, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight+hsize, SWP_NOZORDER | SWP_NOMOVE);
    SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
}
//---------------------------------------------------------------------------
//  Get access to the video source dialog box
//---------------------------------------------------------------------------
void TCap::Source ()
{
    capDlgVideoSource(hwndVideo);
}

//---------------------------------------------------------------------------
//  capture a frame and save it
//---------------------------------------------------------------------------
void TCap::CaptureFrame (char *FileName)
{
    capFileSaveDIB (hwndVideo, FileName);
}



Archivode cabecera

Código:

//---------------------------------------------------------------------------

#ifndef c_capH
#define c_capH
//---------------------------------------------------------------------------
#include <vfw.h> // video for windows library

class TCap
{
private:

protected:
    HWND ParentHandle;
    HWND hwndVideo;
    CAPDRIVERCAPS CapDrvCaps; // driver capabilities

    int     SelectedDevice;

public:
    TStringList     *pStringCapDrivers;
    int EnumCapDrv();
    void Connect (int Selected);
    void Format ();
    void Source ();
    void CaptureFrame (char *FileName);
  __fastcall TCap(HWND Handle);
  __fastcall ~TCap();
};


#endif
Volver arriba
Mensaje    Asunto: Responder citando

Hola.
Entiendo que no querais instalar componentes externos por el tema de licencias, distribucion, etc. Voy a mirar el código que poneis y lo probaré.
Salu2.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

El codigo que puse funciona perfectamente, lo que necesito es la iluminacion de alguno de ustedes para enviar una imagen por medio de l protocolo tcp/ip, me imagino que es un stream , me imagino que no voy a guardar la imagen el disco voy a a tomar el fram , lo voy a "meter" en un stream de memorya y lo voya envair por medio ntmstrserver a un ntmstrcliente o algo

que alguien me ayude con ejemplos de codigo del uso de sockets Y TRASMISION , yo m encargo de la compresion PLease!!!

ya coloque la clasesista en las seccion de tips

saludos y espero su inmensa ayuda!
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Enviame porfavor algun ejemplo de como lograste pasar una imagen , de un equipo a otro por medio de un stream, te prometo que tan pronto termine el algoritmo de comrpesion te lo envio de vuelta funcionando
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Plz. ejemplo de envio de imagen a travez de un stream!!

leo plz plz

ya ven que siempre les ayudo a todos lo mas que puedo ahora necesito su ayuda no seais egoistas Smile

Gracias por anticipado
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

//Para enviar

void __fastcall TFormMain::SendBtnClick(TObject *Sender)
{
//Paso de BMP a JPEG mi imagen y guardo en un stream

TJPEGImage *jp = new TJPEGImage();
jp->Assign(Image2->Picture->Bitmap);
TMemoryStream *mystr=new TMemoryStream();
jp->SaveToStream(mystr);
NMStrm1->Host = Edit2->Text;
NMStrm1->FromName = Edit1->Text;
NMStrm1->PostIt(mystr);
mystr->Free();
delete jp;
}

//En el evento del componente NMStrmServ1, recupero del stream la imagen
//---------------------------------------------------------------------------
void __fastcall TFormMain::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{
TJPEGImage *jp2 = new TJPEGImage();
jp2->LoadFromStream(strm);
Image3->Picture->Assign(jp2);
delete jp2;

}
Volver arriba
Mensaje    Asunto: Responder citando

Gracias!!!
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Una cosa.
No se como acceder al frame para poder guardarlo en un stream (si no lo es) para poder enviarlo. No quiero guardarlo en un fichero.
Como se hace? No me aclaro con las funciones del API:capVideoStreamCallback
capSetCallbackOnFrame
y otras.
Salu2.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: como guardamos dos jpeg en una misma stream Responder citando

me pregunta es para el invitado, tu codigo es el siguiente
void __fastcall TFormMain::SendBtnClick(TObject *Sender)
{
//Paso de BMP a JPEG mi imagen y guardo en un stream

TJPEGImage *jp = new TJPEGImage();
jp->Assign(Image2->Picture->Bitmap);
TMemoryStream *mystr=new TMemoryStream();
jp->SaveToStream(mystr);
NMStrm1->Host = Edit2->Text;
NMStrm1->FromName = Edit1->Text;
NMStrm1->PostIt(mystr);
mystr->Free();
delete jp;
}
imaginate que ahora antes de enviara stream queremos guardar en ella una segunda imagen en formato jpg, como lo harias por favor

void __fastcall TFormMain::SendBtnClick(TObject *Sender)
{
//Paso de BMP a JPEG mi imagen y guardo en un stream

TJPEGImage *jp = new TJPEGImage();
jp->Assign(Image2->Picture->Bitmap);
TMemoryStream *mystr=new TMemoryStream();
jp->SaveToStream(mystr);
//aqui donde se debe guardar la segunda imagen
//jp->Assign(Image3->Picture->Bitmap);
//.....................................

NMStrm1->Host = Edit2->Text;
NMStrm1->FromName = Edit1->Text;
NMStrm1->PostIt(mystr);
mystr->Free();
delete jp;
}
Volver arriba
Mensaje    Asunto: webcam Responder citando

hola, estoy probando el codigo y algo estoy haciendo mal y no me sale, no lo tendreis alguno ya hecho para echarlo un vistazooo.


MUCHAS GRACIAS
Volver arriba
Mensaje    Asunto: Responder citando

Alguien logró evitar guardar en disco y preparar el stream directamente en memoria?

creo q con esto la cosa iría más rápido.

atte
_________________
Adrián

http://adrian.org.ar
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

adrian.. hice el codigo y si no me equio logre que lo haga en memoria, dejame lo encuentro y te lo envio..sale?

aunque siendo practico.. a mis clientes les vendo ahora camaras IP.. (nos cuestan unos 380 dolares) ..solo la conectas al router y entras a ellas desde cualquier navegador (sabiendo el ip o haciendo una resolucin dinamica) y mira..te evitas 1000 problemas funciona 10,000 veces mejor (por que tiene un procesador integrado solo para la compresion y trasmision) y no dependes de ningun equipo para que funciono

a menos que lo hagas con fines de diversion, no vale la pena invertir mas tiempo en la trasmision con web cams

saludos

Gabriel
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hola a todos, no se si os puede ser util pero podeis echarle un vistazo a
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=19268
no lo he visto asi que no puedo daros una opinion Wink

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.