前端| js动态修改video标签视频不刷新的问题

问题描述:在网页上用<video>标签放一个视频播放器,点击视频目录来自动播放不同的视频。通过js动态生成li,点击li之后更改<video>标签<source>中的src,。代码中的src确实有变化,但是网页中的视频并没有加载新的视频。

前端代码如下:

<video id="video_player" style="margin: 5px 5%" width="90%" height="400" align="center" controls>
     source id="video_source" src="/getVideo?id=1" type="video/mp4">
     您的浏览器不支持 HTML5 video 标签。
</video>
    ref_li_click: function (e) {
        var video_id = $(e).attr("video_id");
        ref_video_list.changeVideoPath(video_id);
    },
    changeVideoPath: function (id) {
        $("#video_source").attr("src", "/getVideo?id="+id);
    }

代码中通过指定视频id从后台获取视频流,然后动态更新视频源,视频源能够成功更改,单独打开接口也能读取视频,但就是video标签不刷新视频。

解决方案:要改video元素的src属性,不是改source元素!

    ref_li_click: function (e) {
        var video_id = $(e).attr("video_id");
        ref_video_list.changeVideoPath(video_id);
    },
    changeVideoPath: function (id) {
        $("#video_player").attr("src", "/getVideo?id="+id);
    }

 

成功刷新视频源

 

 

### Vue 项目中 Video 标签视频无法播放的原因分析 在 Vue H5 项目中使用 `<video>` 标签时,如果遇到视频无法播放的情况,可能是由于路径配置错误或浏览器兼容性问题引起的。对于给定的代码片段: ```html <video src="@/video/qiang.mp4" controls="controls"></video> ``` 这种写法可能导致资源加载失败,因为 `@` 符号通常用于 Webpack 别名解析,在实际构建过程中并会直接转换成正确的相对路径。 ### 解决方案一:修正静态资源路径 为了确保视频能够正常加载,建议将视频文件放置于项目的公共目录下(如 `/public/video/qiang.mp4`),并更新模板中的路径为绝对路径形式[^1]。 ```html <video :src="'/video/qiang.mp4'" controls></video> ``` 注意移除了双引号内的多余引号,并使用了单向数据绑定语法 (`:`) 来动态设置 `src` 属性值。 ### 解决方案二:处理跨域资源共享 (CORS) 当服务器端未正确配置 CORS 头信息时,可能会阻止前端访问媒体资源。确认服务器返回响应头包含如下字段: - Access-Control-Allow-Origin: * - Access-Control-Allow-Methods: GET, POST, OPTIONS - Access-Control-Allow-Headers: Content-Type ### 解决方案三:考虑同设备间的差异 某些情况下,特别是移动平台上可能存在特定的行为限制。例如 Android 微信内置浏览器会存在一些特殊行为,比如自动暂停背景音轨等特性影响到多媒体组件的表现[^3]。 针对这种情况可以尝试引入第三方库来增强对各种环境的支持度,像 flv.js 就是一个错的选择,它专门优化了 HTML5 下 FLV 流媒体格式的支持[^2];而 jsmpeg 更适合用来实现基于 WebSocket 的实时流传输场景下的低延迟互动体验[^4]。 ### 解决方案四:监听属性变化触发 DOM 更新 有时即使改变了 data 中定义的数据项也无法立即反映到视图层面上去。此时可以通过手动操作DOM节点的方式来强制刷新元素状态。具体做法是在 mounted 生命周期钩子函数内获取目标对象实例并通过 JavaScript 修改其 source 地址[^5]。 ```javascript mounted() { this.$nextTick(() => { const player = document.querySelector('video'); if(player){ player.src='/new/path/to/file'; } }); } ``` 以上方法可以帮助排查并修复大部分因技术选型当而导致的问题。当然还需要结合实际情况进一步调试验证效果最佳实践方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值