finnal
This commit is contained in:
Binary file not shown.
@@ -18,26 +18,59 @@ int main()
|
|||||||
{
|
{
|
||||||
VideoCapture cap(0);
|
VideoCapture cap(0);
|
||||||
// 直接传 MJPEG(本身就是全 I 帧)
|
// 直接传 MJPEG(本身就是全 I 帧)
|
||||||
|
// FILE *pipe = popen(
|
||||||
|
// "ffmpeg "
|
||||||
|
// "-f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 "
|
||||||
|
// "-i - "
|
||||||
|
// "-c:v h264_rkmpp "
|
||||||
|
// "-rc_mode 2 " // CQP 模式
|
||||||
|
// "-qp_init 30 "
|
||||||
|
// "-profile baseline "
|
||||||
|
// "-g 1 " // 全 I 帧
|
||||||
|
// "-bf 0 "
|
||||||
|
// "-coder cavlc "
|
||||||
|
// "-8x8dct false "
|
||||||
|
// "-fflags nobuffer "
|
||||||
|
// "-flags low_delay "
|
||||||
|
// "-max_delay 0 "
|
||||||
|
// "-f rtsp -muxdelay 0.001 -rtsp_transport udp "
|
||||||
|
// "rtsp://192.168.12.1:8554/rtsp/test", "w");
|
||||||
|
|
||||||
|
// FILE *pipe = popen(
|
||||||
|
// "ffmpeg "
|
||||||
|
// "-f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 "
|
||||||
|
// "-i - "
|
||||||
|
// "-c:v h264_rkmpp "
|
||||||
|
// "-rc_mode 2 " // CQP 模式(最低延迟)
|
||||||
|
// "-qp_init 32 " // 初始 QP
|
||||||
|
// "-profile baseline " // baseline profile
|
||||||
|
// "-coder cavlc " // CAVLC 编码
|
||||||
|
// "-8x8dct false " // 禁用 8x8 DCT
|
||||||
|
// "-g 1 " // GOP=1(全 I 帧)
|
||||||
|
// "-bf 0 " // 无 B 帧
|
||||||
|
// "-fflags nobuffer " // 无缓冲
|
||||||
|
// "-flags low_delay " // 低延迟标志
|
||||||
|
// "-max_delay 0 " // 零延迟
|
||||||
|
// "-f rtsp -rtsp_transport udp "
|
||||||
|
// "rtsp://192.168.12.1:8554/rtsp/test",
|
||||||
|
// "w");
|
||||||
|
|
||||||
|
|
||||||
|
// UDP传输
|
||||||
FILE *pipe = popen(
|
FILE *pipe = popen(
|
||||||
"ffmpeg "
|
"ffmpeg "
|
||||||
"-f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 "
|
"-f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 "
|
||||||
"-i - "
|
"-i - "
|
||||||
"-c:v h264_rkmpp "
|
"-c:v h264_rkmpp "
|
||||||
"-rc_mode 2 " // CQP 模式
|
"-rc_mode 2 -qp_init 32 "
|
||||||
"-qp_init 30 "
|
"-profile baseline -coder cavlc "
|
||||||
"-profile baseline "
|
"-g 1 -bf 0 "
|
||||||
"-g 1 " // 全 I 帧
|
"-fflags nobuffer -flags low_delay "
|
||||||
"-bf 0 "
|
"-f h264 udp://192.168.12.1:8888?pkt_size=1316", "w");
|
||||||
"-coder cavlc "
|
|
||||||
"-8x8dct false "
|
if (pipe)
|
||||||
"-fflags nobuffer "
|
{
|
||||||
"-flags low_delay "
|
setvbuf(pipe, NULL, _IONBF, 0); // 添加无缓冲模式
|
||||||
"-max_delay 0 "
|
|
||||||
"-f rtsp -muxdelay 0.001 -rtsp_transport udp "
|
|
||||||
"rtsp://192.168.12.1:8554/rtsp/test", "w");
|
|
||||||
|
|
||||||
if (pipe) {
|
|
||||||
setvbuf(pipe, NULL, _IONBF, 0); // 添加无缓冲模式
|
|
||||||
}
|
}
|
||||||
if (!pipe)
|
if (!pipe)
|
||||||
{
|
{
|
||||||
@@ -86,7 +119,7 @@ int main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
fwrite(frame.data, 1, frame.total() * frame.elemSize(), pipe);
|
fwrite(frame.data, 1, frame.total() * frame.elemSize(), pipe);
|
||||||
fflush(pipe); // 立即刷新
|
fflush(pipe); // 立即刷新
|
||||||
// imshow("测试画面", frame);
|
// imshow("测试画面", frame);
|
||||||
|
|
||||||
// 按下 'q' 键退出
|
// 按下 'q' 键退出
|
||||||
|
|||||||
Reference in New Issue
Block a user