ffmpeg linux 摄像头推流 rtmp C 代码
时间: 2023-08-15 22:09:01 浏览: 170
你可以使用FFmpeg库来在Linux上推送摄像头流到RTMP服务器。下面是一个示例的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define WIDTH 640
#define HEIGHT 480
#define FPS 30
#define RTMP_URL "rtmp://your-rtmp-server-url"
int main(void) {
FILE *pipein;
char command[256];
int frame_size = WIDTH * HEIGHT * 3;
// 构建FFmpeg命令
sprintf(command, "ffmpeg -f rawvideo -pixel_format rgb24 -video_size %dx%d -framerate %d -i - -c:v libx264 -pix_fmt yuv420p -f flv %s", WIDTH, HEIGHT, FPS, RTMP_URL);
// 打开管道
pipein = popen(command, "w");
if (pipein == NULL) {
fprintf(stderr, "Error opening pipe for output\n");
return -1;
}
// 分配视频帧内存
unsigned char *frame = (unsigned char *) malloc(frame_size);
if (frame == NULL) {
fprintf(stderr, "Error allocating frame memory\n");
pclose(pipein);
return -1;
}
// 循环读取摄像头帧并推流
while (1) {
// 读取摄像头帧到内存
// 这里需要根据你的摄像头接口进行实现
// 可以使用视频采集库,如V4L2等
// 将摄像头帧数据写入pipein以推流
if (fwrite(frame, 1, frame_size, pipein) != frame_size) {
fprintf(stderr, "Error writing to pipe\n");
break;
}
}
// 释放资源
free(frame);
pclose(pipein);
return 0;
}
```
请注意,这只是一个简单的示例,你需要根据你的摄像头接口进行实际的摄像头帧读取操作。另外,还需要将`RTMP_URL`替换为你的RTMP服务器的URL。
阅读全文