全新体验!正如标题所说,我正在尝试使用从网络摄像头捕获的H.264从OpenCV通过Live555提供流。
我试过这样做:
#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服务?似乎没有一种直接的方式来从一个字节流到另一个字节流,或者我可能错过了一些东西。
我知道真的没有直接的方法;当然,在少于几百行的代码中不会发生任何事情。
我假设你想使用按需RTSP服务器(这是服务器只是坐在那里,等待客户端连接,然后当客户端建立连接并发出请求时,它开始流)?如果是,Live555常见问题解答中的这一项适用。
然而,Live555是一个奇怪的(可能是被误导的?)库,所以不幸的是它比这更复杂。Live555使用带有事件循环的单线程操作,因此您要做的是将原始字节流推入缓冲区或队列,然后在用于流式传输H.264的子会话类中,您将检查并查看队列中是否有可用数据,如果有,则将其传递下去。如果没有,请在几毫秒内安排另一次检查。在将NALU标识符传递给live555之前,还需要去掉它们。