(sorry for my english)
I have an application that generate images and i need to stream this images (like a video) to another location through network (udpsink, tcpserversink, etc) . I wan't to use QGst, my application is write with Qt (but without GUI). So i use ApplicationSource to accomplish that (push the generated images into the pipeline to stream).. And i get this: (A Thread class, read the images from a Circular Buffer) StreamThread::StreamThread(FrameBuffer *b, QObject *parent):QThread(parent){ this->ImageBuffer = b; QGst::init(NULL,NULL); qDebug()<<"Iniciando Stream ImageBuffer Size " << this->ImageBuffer->getBufferSize(); QString pipe_str = QString("appsrc name=\"appsrc\" caps=\"video/x-raw-rgb,width=320,height=240\" ! videoparse format=14 width=%1 height=%1 ! videorate " " ! videoscale ! video/x-raw-rgb,width=320,height=240 " " ! ffmpegcolorspace ! jpegenc ! multipartmux " " ! tcpserversink port=5000 ").arg(WIDTH,HEIGHT); this->pipeline = QGst::Parse::launch(pipe_str).dynamicCast<QGst::Pipeline>(); this->m_src.setElement(this->pipeline->getElementByName("appsrc")); this->pipeline->setState(QGst::StatePlaying); } //The run method void StreamThread::run(){ for(;;){ Mat frame = this->ImageBuffer->getFrame(); if(!this->m_src.element().isNull() && !frame.empty()){ QGst::BufferPtr buffer = QGst::Buffer::create(640*480*3); quint8 *data = buffer->data(); memcpy(buffer->data(),(quint8*)frame.data,640*480*3); if(!buffer.isNull()){ QGst::FlowReturn ret = this->m_src.pushBuffer(buffer); if(ret!=QGst::FlowOk) qDebug()<<"Error"; } buffer.clear(); } } } The Circular Buffer (ImageBuffer) represents a queue containing OpenCV frames, this represent the image like a (uchar*) matrix in frame.data This run without problem, but if i try to see the stream in for example another terminal in the same machine (or other) with gst-launch tcpclientsrc port=5000 ! multipartdemux ! jpegdec ! ffmpegcolorspace ! glimagesink sync=false This pipeline never go to PLAYING state ... Any idea why?? i though in the buffer copy part.. i try to check what is in the buffer and i get always the same memory direction of *data .. so i think i never push valid data to appsrc .... Thanks in advance MatÃas Hernandez Arellano Ingeniero de Software/Proyectos en VisionLabs S.A CDA Archlinux-CL www.msdark.archlinux.cl _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |