结合前面的 采集 v4l2 视频, 使用 live555, 通过 rtsp 发布实时流. capture.h, capture.cpp, vcompress.h, vcompress.cpp 需要参考前面几片文章. 这里仅仅贴出 v4l2_x264_service.cpp
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <liveMedia.hh>
#include <BasicUsageEnvironment.hh>
#include <GroupsockHelper.hh>
#include <sys/types.h>
#include <sys/syscall.h>
#include "capture.h"
#include "vcompress.h"
static UsageEnvironment *_env = 0;
#define SINK_PORT 3030
#define VIDEO_WIDTH 320
#define VIDEO_HEIGHT 240
#define FRAME_PER_SEC 5.0
pid_t gettid()
{
return syscall(SYS_gettid);
}
// 使用 webcam + x264
class WebcamFrameSource : public FramedSource
{
void *mp_capture, *mp_compress; // v4l2 + x264 encoder
int m_started;
void *mp_token;
public:
WebcamFrameSource (UsageEnvironment &env)
: FramedSource(env)
{
fprintf(stderr, "[%d] %s .... calling\n", gettid(), __func__);
mp_capture = capture_open("/dev/video0", VIDEO_WIDTH, VIDEO_HEIGHT, PIX_FMT_YUV420P);
if (!mp_capture) {
fprintf(stderr, "%s: open /dev/video0 err\n", __func__);
exit(-1);
}
mp_compress = vc_open(VIDEO_WIDTH, VIDEO_HEIGHT, FRAME_PER_SEC);
if (!mp_compress) {
fprintf(stderr, "%s: open x264 err\n", __func__);
exit(-1);
}
m_started = 0;
mp_token = 0;
}
~WebcamFrameSource ()
{
fprintf(stderr, "[%d] %s