ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

marimo 视频播放指南:用 mo.video() 在响应式笔记本中嵌入视频

marimo 视频播放指南:用 mo.video() 在响应式笔记本中嵌入视频 marimo 视频播放指南用 mo.video() 在响应式笔记本中嵌入视频【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimomo.video()是 marimo 提供的内置媒体输出函数用于在笔记本单元中渲染 HTML5video视频播放器支持远程 URL、本地文件、bytes与二进制文件对象等多种数据源。通过本文你将掌握mo.video()的全部参数用法、四种输入类型的分流处理规则以及其背后虚拟文件virtual file服务机制从而在实验报告、数据看板与交互式演示中稳定地嵌入大体积视频。一、快速上手一行代码播放视频mo.video()的使用非常直接传入一个视频地址即可返回一个Html对象marimo 会将其渲染为带播放控件的video元素。官方 API 文档 docs/api/media/video.md 给出的最小示例是import marimo as mo mo.video(srchttps://docs.marimo.io/_static/readme-ui.mp4)在 marimo 笔记本中只需把这一行放进任意单元等价于文档示例中包裹在app.cell里的写法运行后即可看到一个可播放、可暂停的视频输出。mo.video()与其他媒体输出函数如mo.image、mo.audio、mo.pdf、mo.download同属于媒体输出家族详见 docs/api/media/index.md 中的总览表。二、参数详解控制播放行为与外观mo.video()的完整签名定义在 marimo/_plugins/stateless/video.py 中共 8 个参数全部带默认值参数类型默认值说明srcstr|bytes|io.BytesIO|io.BufferedReader必填视频来源URL、本地文件路径、字节串或二进制文件对象controlsboolTrue是否显示播放控件播放/暂停、进度条、音量等mutedboolFalse是否静音autoplayboolFalse是否自动播放仅在mutedTrue时才生效loopboolFalse是否循环播放widthint|str|NoneNone视频宽度像素值或带单位的字符串heightint|str|NoneNone视频高度像素值或带单位的字符串roundedboolFalse是否将四角渲染为圆角圆角半径 4px一个综合示例import marimo as mo mo.video( srchttps://docs.marimo.io/_static/readme-ui.mp4, controlsTrue, mutedTrue, autoplayTrue, # 静音条件下才会真正自动播放 loopTrue, width640, height360, roundedTrue, )autoplay 的浏览器限制autoplayTrue时视频只会静音播放。这是因为主流浏览器出于用户体验策略普遍禁止有声自动播放因此源码实现将autoplay与muted两个布尔参数独立下发到video标签见 marimo/_output/builder.py 中h.video的标签拼装逻辑是否真正自动播放由浏览器策略决定。三、四种数据源URL、本地文件、bytes 与文件对象src参数是mo.video()的核心其类型判定逻辑集中在_get_resolved_src函数marimo/_plugins/stateless/video.py规则如下文件对象io.BufferedReader/io.BytesIO先记录当前指针位置tell()读取全部内容注册为虚拟文件后再恢复指针位置避免破坏调用方对流的使用状态bytes字节串直接注册为虚拟文件扩展名默认.mp4字符串先执行os.path.expanduser展开~若展开后是磁盘上的真实文件则以二进制读取并注册为虚拟文件扩展名取自文件后缀缺失时回退.mp4其余字符串交给io_to_data_urlmarimo/_plugins/core/media.py处理——HTTP(S) URL 原样返回base64 data URL 保持原样。import io import marimo as mo # 1. 远程 URL mo.video(https://example.com/demo.mp4) # 2. 本地文件路径支持 ~ 展开 mo.video(~/videos/demo.mp4) # 3. 二进制字节串 with open(demo.mp4, rb) as f: mo.video(f.read()) # 4. 文件对象 mo.video(io.BytesIO(open(demo.mp4, rb).read()))值得注意的是如果传入的字符串既不是可读文件例如文件不存在或当前工作目录与笔记本目录不一致导致相对路径解析失败该路径会被原样透传到video的src属性交由前端浏览器去解析而不是报错或内联——这正是文档与测试共同验证过的路径透传行为。四、底层原理虚拟文件机制避免大体积数据内联为什么本地文件和字节数据不直接拼成 base64 data URL原因在于视频体积通常较大内联会导致输出消息膨胀、超出消息大小限制。因此实现选择了与mo.audio、mo.image一致的方案把视频数据注册为虚拟文件通过 URL 方式按需提供。整个链路在源码中清晰可见_get_resolved_src调用 marimo/_output/data/data.py 中的video(data, extmp4)后者创建VirtualFileLifecycleItem并把虚拟文件加入单元生命周期注册表前端拿到的是形如file/...的虚拟文件 URL而非内联数据最终由 marimo/_output/builder.py 中的h.video拼装出video src... controls muted autoplay loop style.../videoHTML 片段并连同内联样式宽高、圆角一起返回。这种方式确保即使视频文件很大输出通道也只传输一个小 URL视频数据由 marimo 运行时按需流式提供。五、测试验证各数据源行为均有据可查仓库在 tests/_plugins/stateless/test_video.py 中为上述行为提供了完整的自动化测试URL 直传外部 URL 原样写入src结果中不出现data:内联数据路径透传不存在的路径如public/__marimo_test_does_not_exist__.mp4原样保留bytes 与 BytesIO注册到虚拟文件注册表文件名以.mp4结尾本地文件解析后src指向file/虚拟文件 URL同样不产生data:内联数据。这些测试印证了第一节到第三节描述的所有规则也说明这些行为是 marimo 的稳定契约而非偶然实现。六、注意事项与最佳实践自动播放必须配合静音需要进页即播效果时请同时设置autoplayTrue, mutedTrue优先使用 URL 或本地路径视频体积大尽量避免在代码中直接放置超大bytes字面量利用虚拟文件机制可绕过输出大小限制roundedTrue的圆角为固定 4px与 marimo 其他媒体输出的视觉风格保持一致width/height支持数字或带单位字符串如50%需要百分比布局时可直接传入字符串返回值是Html对象可以继续嵌入mo.hstack、mo.vstack、mo.ui.tabs等布局组件或与其他输出组合成更复杂的展示。掌握以上用法后你就可以在 marimo 笔记本中自由嵌入演示视频、结果录屏或教学素材让输出真正动起来。【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表