本文目录导读:

Streamlit 显示视频非常简单,你只需要几行代码就能完成,非常适合快速搭建演示或原型。
以下是几种常见的实现方式:
显示本地视频文件(最简单)
前提:你有一个本地视频文件(如 demo.mp4)放在项目目录下。
import streamlit as st
from pathlib import Path
# 方法一:直接使用 st.video(推荐)
video_file = open('demo.mp4', 'rb') # 以二进制读模式打开
video_bytes = video_file.read()
st.video(video_bytes)
# 或者更简洁的写法:
# st.video(Path('demo.mp4').read_bytes())
显示网络视频
如果视频已经托管在网络上(如 YouTube、B站或视频CDN链接):
import streamlit as st
# 直接传入 URL 字符串
st.video("https://www.youtube.com/watch?v=your_video_id")
# 或
st.video("https://example.com/sample.mp4")
显示摄像头实时画面(需要额外库)
如果想实现类似视频监控的实时画面,需要结合 OpenCV:
import streamlit as st
import cv2
# 开启摄像头
cap = cv2.VideoCapture(0)
# 创建一个占位符,用于不断刷新画面
frame_placeholder = st.empty()
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 将 OpenCV 的 BGR 格式转为 RGB
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 显示在 Streamlit 中
frame_placeholder.image(frame, channels="RGB")
# 控制帧率(可选)
import time
time.sleep(0.03)
使用侧边栏或列布局控制视频
import streamlit as st
# 在侧边栏加一个视频
with st.sidebar:
st.video("intro.mp4", format="video/mp4")
# 在列中显示
col1, col2 = st.columns(2)
with col1:
st.video("left_clip.mp4")
with col2:
st.video("right_clip.mp4")
核心参数说明
st.video(data, format="video/mp4", start_time=0) 支持几个参数:
- data:可以是字节、文件对象、URL 字符串或 numpy 数组(需要搭配
st.image) - format:指定视频格式(MIME类型),如
video/mp4,video/webm等 - start_time:从第几秒开始播放(单位:秒)
注意事项
- 文件大小:Streamlit 默认限制上传文件大小为 200MB(可调整),处理大视频时建议用 URL 而非本地文件
- 兼容性:确保视频编码为 H.264,浏览器兼容性最好
- 实时画面:上面的实时摄像头示例使用了
while循环,这会让页面一直加载,适合监控场景,但不适合长时间无人值守的演示 - 网络视频:部分平台(如 B 站)的视频直链有防盗链,可能需要使用特殊方式获取真实播放地址
- 简单展示本地或网络视频:1-2行代码,非常容易
- 实时摄像头:需要额外写 OpenCV 代码,但也不复杂
- 核心函数:
st.video()
所以答案是:如果你只是展示一个已有的视频文件或链接,Streamlit 做得非常简单直接。