~WebcamFrameSource () { fprintf(stderr, "[%d] %s .... calling\n", gettid(), __func__); if (m_started) { envir().taskScheduler().unscheduleDelayedTask(mp_token); } if (mp_compress) vc_close(mp_compress); if (mp_capture) capture_close(mp_capture); }
int main (int argc, char **argv) { void *capture = capture_open("/dev/video0", VIDEO_WIDTH, VIDEO_HEIGHT, PIX_FMT_YUV420P); if (!capture) { fprintf(stderr, "ERR: can't open '/dev/video0'\n"); exit(-1); } void *encoder = vc_open(VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_FPS); if (!encoder) { fprintf(stderr, "ERR: can't open x264 encoder\n"); exit(-1); } void *sender = sender_open(TARGET_IP, TARGET_PORT); if (!sender) { fprintf(stderr, "ERR: can't open sender for %s:%d\n", TARGET_IP, TARGET_PORT); exit(-1); } int tosleep = 1000000 / VIDEO_FPS; FILE *fp_save = fopen("./my1.264", "wb"); for (; ; ) { // 抓 Picture pic; capture_get_picture(capture, &pic); // 压 const void *outdata; int outlen; int rc = vc_compress(encoder, pic.data, pic.stride, &outdata, &outlen); if (rc < 0) continue; // 发 sender_send(sender, outdata, outlen); fwrite(outdata, 1, outlen, fp_save); // 等 //usleep(tosleep); } fclose(fp_save); sender_close(sender); vc_close(encoder); capture_close(capture); return 0; }