这里写自定义目录标题
- [〇、 准备推流服务器](#〇、 准备推流服务器)
-
- [0.1、使用 nginx-rtmp-module 作为推流服务器](#0.1、使用 nginx-rtmp-module 作为推流服务器)
- 0.2、安装ffmpeg
- 一、将本地视频文件进行直播推流
- 二、调用摄像头画面进行直播推流
- 三、查看直播画面
-
- [3.1、使用VLC video Player进行查看](#3.1、使用VLC video Player进行查看)
- 3.2、使用ffplay进行查看
- 四、后记
〇、 准备推流服务器
0.1、使用 nginx-rtmp-module 作为推流服务器
详细安装参见: nginx-rtmp-module
0.2、安装ffmpeg
参考官方文档。
一、将本地视频文件进行直播推流
ffmpeg -re -stream_loop -1 -i fujian.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1:1935/hls/stream
:
-re:以输入文件的实际帧率读取数据,而不是以最快速度读取。这个选项通常用于实时流媒体输出,确保视频按实际播放速度进行推流。
:
-stream_loop -1: 表示循环播放
:
-i fujian.mp4:-i 表示输入文件的路径,a.mp4 是输入的视频文件名。FFmpeg 将从这个文件读取视频和音频数据。
:
-c:v libx264:-c:v 表示视频编解码器的选项,libx264 是指定使用 H.264 编码器。H.264 是一种常见的高效视频压缩标准,广泛用于流媒体和存储。
:
-c:a aac:-c:a 表示音频编解码器的选项,aac 是指定使用 AAC(高级音频编码)编码器。AAC 是一种高效的音频编码标准,常用于流媒体传输。
:
-f flv:-f 表示输出格式,flv 指定输出为 FLV(Flash Video)格式。这种格式广泛用于 RTMP 流媒体传输。
rtmp://127.0.0.1/live/stream:这是目标 RTMP 服务器的 URL,包含以下部分:
:
127.0.0.1:表示目标服务器的 IP 地址,这里是本地地址(localhost)
:
1935: 表示目标服务器的端口号
:
/live:表示应用名称,可以根据服务器配置更改
:
/stream:表示流密钥,用于标识具体的流,可以根据需求更改
二、调用摄像头画面进行直播推流
2.1、获取摄像头和麦克风名称
ffmpeg -list_devices true -f dshow -i dummy
通常会输出如下内容:
ffmpeg version 8.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 15.2.0 (Rev8, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-openal --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 60. 8.100 / 60. 8.100
libavcodec 62. 11.100 / 62. 11.100
libavformat 62. 3.100 / 62. 3.100
libavdevice 62. 1.100 / 62. 1.100
libavfilter 11. 4.100 / 11. 4.100
libswscale 9. 1.100 / 9. 1.100
libswresample 6. 1.100 / 6. 1.100
[dshow @ 0000017afee13b00] "Integrated Camera" (video)
[dshow @ 0000017afee13b00] Alternative name "@device_pnp_\\?\usb#vid_13d3&pid_56bb&mi_00#6&13f42a17&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 0000017afee13b00] "OBS Virtual Camera" (none)
[dshow @ 0000017afee13b00] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}"
[dshow @ 0000017afee13b00] "Microphone (High Definition Audio Device)" (audio)
[dshow @ 0000017afee13b00] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{BFC17245-8462-43DC-BA3D-5D251B56D924}"
Error opening input file dummy.
如上文,可以得到摄像头名称为:Integrated Camera、麦克风名称为:Microphone (High Definition Audio Device)
2.2、进行推流
ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone (High Definition Audio Device)" -vcodec libx264 -acodec aac -preset ultrafast -tune zerolatency -f flv rtmp://127.0.0.1:1935/live/stream
推流成功后,会有如下提示:
[aist#0:1/pcm_s16le @ 00000174ac1b9040] Guessed Channel Layout: stereo
Input #0, dshow, from 'video=Integrated Camera:audio=Microphone (High Definition Audio Device)':
Duration: N/A, start: 1149368.958000, bitrate: 1411 kb/s
Stream #0:0: Video: mjpeg (Baseline) (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 10000k tbn, start 1149369.135702
Stream #0:1: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s, start 1149368.958000
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 00000174ac24dc00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000174ac24dc00] profile High 4:2:2, level 3.1, 4:2:2, 8-bit
[libx264 @ 00000174ac24dc00] 264 - core 165 r3223 0480cb0 - H.264/MPEG-4 AVC codec - Copyleft 2003-2025 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=11 lookahead_threads=11 sliced_threads=1 slices=11 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, flv, to 'rtmp://127.0.0.1:1935/live/stream':
Metadata:
encoder : Lavf62.3.100
Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuvj422p(pc, bt470bg/unknown/unknown, progressive), 1280x720, q=2-31, 30 fps, 1k tbn
Metadata:
encoder : Lavc62.11.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc62.11.100 aac
[flv @ 00000174ac1bb5c0] Failed to update header with correct duration.20.4kbits/s dup=0 drop=24 speed= 1x elapsed=0:06:46.85
[flv @ 00000174ac1bb5c0] Failed to update header with correct filesize.
[out#0/flv @ 00000174ac1bc740] video:177916KiB audio:6544KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.351259%
frame=12132 fps= 30 q=21.0 Lsize= 185109KiB time=00:06:47.56 bitrate=3720.7kbits/s dup=0 drop=24 speed= 1x elapsed=0:06:47.40
[libx264 @ 00000174ac24dc00] frame I:49 Avg QP:18.22 size: 65490
[libx264 @ 00000174ac24dc00] frame P:12083 Avg QP:21.15 size: 14812
[libx264 @ 00000174ac24dc00] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 00000174ac24dc00] mb P I16..4: 5.9% 0.0% 0.0% P16..4: 50.2% 0.0% 0.0% 0.0% 0.0% skip:43.9%
[libx264 @ 00000174ac24dc00] coded y,uvDC,uvAC intra: 6.1% 75.8% 13.6% inter: 12.8% 41.5% 1.6%
[libx264 @ 00000174ac24dc00] i16 v,h,dc,p: 46% 27% 12% 15%
[libx264 @ 00000174ac24dc00] i8c dc,h,v,p: 48% 20% 22% 10%
[libx264 @ 00000174ac24dc00] kb/s:3604.07
[aac @ 00000174ac244000] Qavg: 569.371
三、查看直播画面
3.1、使用VLC video Player进行查看
菜单栏:媒体 -> 打开网络串流,在"网络"选项卡中配置上面推流命令地址:rtmp://127.0.0.1:1935/live/stream,点击"播放"即可查看直播画面。
3.2、使用ffplay进行查看
ffplay rtmp://127.0.0.1:1935/live/stream
四、后记
关于ffmpeg还有很多强大功能,参考官方文档进行使用即可。