2011-07-05 46 views
1

完全不熟悉这个!正如标题所说,我试图通过使用从网络摄像头捕获的H.264的Live555从OpenCV提供一个流。在Windows上通过Live555为OpenCV H.264流提供服务

我已经试过类似:

#define LOCALADDRESS "rtsp://localhost:8081" // Address media is served 
#define FOURCCCODEC CV_FOURCC('H','2','6','4') // H.264 codec 
#define FPS 25        // Frame rate things run at 
m_writer = cvCreateVideoWriter(LOCALADDRESS, FOURCCCODEC, FPS, cvSize(VIDEOWIDTH, VIDEOHEIGHT)); 

为阅读RTSP流,也同样做到:

CvCapture *capture = cvCreateFileCapture(LOCALADDRESS); 

不工作,所以我转向LIVE555。如何提供由H.264编码的CvCapture以供Live555使用?似乎没有一种直接的方式来为一个字节流提供服务,或者我错过了一些东西。

回答

3

真的不是我知道的直截了当的方式;当然在任何少于几百行的代码中都不会发生任何事情。

我假设你想要使用按需RTSP服务器(这是服务器只是坐在那里,等待客户端连接,然后当客户端建立连接并发出请求时开始流式传输)?如果是这样,this item in the Live555 FAQ applies

However, Live555 is a weird (possibly misguided?) library,所以不幸的是比这更复杂一点。 Live555在事件循环中使用一个单一的操作线程,所以你必须做的是将你的原始字节流转移到缓冲区或队列中,然后在你的子流媒体类中传输H.264流,你会检查并看看是否队列中有可用的数据,如果有的话,传递给它。如果没有,请在几毫秒内安排另一次检查。在将它们传递给live555之前,您还需要剥离任何NALU标识符。