ffmpeg推流,vlc拉流教程

本文提供了一个ffmpeg推流和vlc拉流的详细教程。包括win平台rtmp服务器搭建、ffmpeg推流指令详解、python实现推流直播以及vlc拉流的下载和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ffmpeg推流,vlc拉流教程

win搭建rtmp服务器教程:https://blog.csdn.net/BigHorse110/article/details/119538683

rtmp服务app:https://github.com/aler9/rtsp-simple-server

ffmpeg指令教程:https://blog.csdn.net/zqf_office/article/details/56309412

ffmpeg超详细指令教程https://www.toutiao.com/article/7101556759998857768/?wid=1656052183280

ffmpeg参数详解:https://blog.csdn.net/fanyun_01/article/details/103299866

ffmpeg指令教程2:https://wenku.baidu.com/view/6667fd0a2c60ddccda38376baf1ffc4ffe47e231.html

PYTHON实现推流直播:https://www.freesion.com/article/3564625851/

列出所有 -f 参数的格式
ffmpeg -formats
# 电脑摄像头支持的格式是sln(Asterisk raw pcm,摄像头输出格式是pcm)

推流摄像头
ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称

ffmpeg -f dshow -i video="获取的摄像头的名称" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv <推流地址> #获取视频流并推流

ffmpeg -hwaccel cuda -f dshow -i video="Microsoft LifeCam Studio(TM)" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -max_delay 100 -g 2 -s 640*480 -r 30 -b:v 3500k -rtsp_transport tcp -f rtsp rtsp://192.168.1.50:8554/live

ffmpeg -f dshow -i audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://192.168.1.50:8554/test

python代码实现:

import cv2

# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess

# 视频读取对象
cap = cv2.VideoCapture(0)

# 读取一帧
ret, frame = cap.read()

# 推流地址
rtmp = "rtmp://127.0.0.1:1935/live/stream"

"""ffmpeg -re -i F:/badapple.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/stream"""
# 推流参数
command = ['ffmpeg',
           '-y',
           '-f', 'rawvideo',
           '-vcodec', 'rawvideo',
           '-pix_fmt', 'bgr24',
           '-s', '720*560',  # 根据输入视频尺寸填写
           '-r', '25',
           '-i', '-',
           '-c:v', 'h264',
           '-pix_fmt', 'yuv420p',
           '-preset', 'ultrafast',
           '-f', 'flv',
           rtmp]

# 创建、管理子进程
pipe = subprocess.Popen(command, stdin=subprocess.PIPE)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 循环读取
while cap.isOpened():
    # 读取一帧
    ret, frame = cap.read()
    if frame is None:
        print('read frame err!')
        continue

    # 显示一帧
    cv2.imshow("frame", frame)

    # 按键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

    # 读取尺寸、推流
    img = cv2.resize(frame, size)
    pipe.stdin.write(img.tobytes())

# 关闭窗口
cv2.destroyAllWindows()

# 停止读取
cap.release()
# 摄像头实时推流

import cv2

# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess
import pyaudio

# 视频读取对象
cap = cv2.VideoCapture(0)

# 推流地址
rtmp = "rtsp://192.168.1.50:8554/live"  # 推流的服务器地址

# 设置推流的参数
command = ['ffmpeg',
           "-hwaccel", "cuda",  # 显示可用的硬件加速方法
           '-y',  # 覆盖已有文件。
           '-f', 'rawvideo',  # 指定格式(音频或者视频格式)
           '-vcodec', 'rawvideo',  # 强制使用codec编解码方式('copy'代表不进行重新编码)
           '-pix_fmt', 'bgr24',  # 显示可用的像素格式
           '-s', '640*480',  # 指定分辨率,根据输入视频尺寸填写
           '-r', 
### 使用 C# 和 FFmpeg 实现 RTSP 并通过 VLC #### 准备工作 为了实现这一目标,需要准备如下工具和库: - **FFmpeg**: 用于处理音视频数据的编码、解码以及操作。 - **Vlc.DotNet**: 这是一个允许 .NET 应用程序嵌入 VideoLAN 的 VCL 控件来播放多媒体文件或网络的库。 #### 安装依赖项 对于项目中的 NuGet 包管理器,在 Visual Studio 中可以通过以下命令安装 `Vlc.DotNet`: ```shell Install-Package Vlc.DotNet.Core ``` 另外还需要确保系统中有可用版本的 FFmpeg 可执行文件,并将其路径加入环境变量以便于调用[^1]。 #### 编写代码示例 ##### 创建控制台应用程序以启动 FFmpeg 并进行 RTSP 下面是一段简单的 C# 代码片段用来展示如何利用 Process 类启动外部进程 FFmpeg 来完成 RTSP 传输的任务。这里假设已经有一个本地 MP4 文件作为输入源。 ```csharp using System; using System.Diagnostics; class Program { static void Main(string[] args) { string inputFile = "path/to/input.mp4"; // 输入文件位置 string rtmpUrl = "rtsp://localhost:8554/stream"; // 输出RTSP URL var processStartInfo = new ProcessStartInfo() { FileName = "ffmpeg", Arguments = $"-re -i \"{inputFile}\" -vcodec libx264 -acodec aac -f rtsp {rtmpUrl}", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true }; using (var process = Process.Start(processStartInfo)) { while (!process.HasExited) { Console.WriteLine(process.StandardOutput.ReadLine()); } } Console.WriteLine("Stream finished."); } } ``` 这段代码会读取指定路径下的 mp4 文件并向给定的目标地址发送 RTSP 。注意 `-re` 参数表示按照原始帧率读取输入文件;而 `-vcodec`, `-acodec` 则指定了视频编解码方式为 H.264 和 AAC 格式[^2]。 ##### 使用 Vlc.DotNet 在 Windows Forms 或 WPF 上显示接收到的 RTSP 接下来是在 GUI 应用中接收并渲染来自上述 RTSP 地址的内容的例子。此部分适用于 WinForms 或者 WPF 开发模式下。 ###### 对于 WinForms 用户界面的应用场景 ```csharp // 假设已创建好 Form 表单窗口 formMain, 添加一个名为 vlcControl 的控件实例化对象 private VlcControl vlcControl; public MainForm(){ InitializeComponent(); this.vlcControl.VlcLibDirectoryNeeded += OnVlcLibDirectoryNeeded; } void PlayRtspStream(string url){ if(!string.IsNullOrEmpty(url)){ vlcControl.MediaPlayer.Play(new Uri(url)); }else{ MessageBox.Show("Invalid stream URL"); } } private void OnVlcLibDirectoryNeeded(object sender,VlcLibDirectoryNeededEventArgs e){ // 设置 VLC 动态链接库所在的目录 e.VlcLibDirectory = new DirectoryInfo(@"C:\Program Files\VideoLAN\VLC"); } ``` 以上展示了怎样设置 VLC 控制面板组件关联至特定版本的 VLC DLLs 所处的位置,并通过 URI 方式打开远程资源连接。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也很简单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值