在做一个 webrtc 的应用,video 标签接收的是一个远程的流媒体信息,我现在的需求是可以修改播放视频的分辨率,网上推荐使用的方法都是使用track.applyConstraints
的方式去修改,但我试了好像都没生效,甚至有说直接修改 video 的 witdh 和 height 就可以修改分辨率的(这种明显不对吧),目前主流视频网站都是有提供切换分辨率的操作,现在求助有熟悉影音开发的大佬正确的做法是什么,谢谢~
1
zack5337 168 天前
这个不应该是用户去重新请求不同分辨率的视频流
|
2
iOCZS 168 天前
这个是对的啊,可以修改自己上传的视频流分辨率:
```js const constraints = { width: {min: 640, ideal: 1280}, height: {min: 480, ideal: 720}, advanced: [{width: 1920, height: 1280},{aspectRatio: 1.333}] }; navigator.mediaDevices.getUserMedia({ video: true }) .then(mediaStream => { const track = mediaStream.getVideoTracks()[0]; track.applyConstraints(constraints) .then(() => { // Do something with the track such as using the Image Capture API. }) .catch(e => { // The constraints could not be satisfied by the available devices. }); }); ``` |
6
pangxiaojian 168 天前
各种不同的分辨率,针对的源 ur 是不一样的,切换分辨率是直接请求新的 ur 就行了,如果没有多个不同分辨率的源,怎么改都没用啊?那有本地自动调整分辨率的
|
7
xu455255849 168 天前
API 肯定有效的,无效就是你们的问题,服务端的问题可能更大,毕竟你只要改个参数就好了
如果服务端推流不支持其它分辨率 你怎么改也没有用,建议用 exact width height 这样不支持的话就直接报错了,你也知道它不支持 |
8
mandex 168 天前
对方发送的视频流是固定的分辨率,你这边选择的意义是什么啊?
|
9
sujin190 168 天前
接收端修改的意思应该是向对方发送申请新分辨率的视频流吧,应该不是让本地转码改变分辨率吧,看你这情况对方肯定不接受啊,所以显然改不了,视频分辨率不重新转码应该是改不了分辨率的吧,否则各大视频网站也就不需要为每种分辨率在服务端提前转码并单独保存了,或许你应该在收到视频流后先用媒体扩展转个码再发送给 video 标签吧
|
10
ysc3839 168 天前 via Android
你都说了是接收远程视频流,那当然是要在发送端改呀。
applyConstraints 你去搜索一下,MDN 的页面应该是排在前面几个的,进去能明显看到是先 mediaDevices.getUserMedia 再修改分辨率,而 getUserMedia 是请求用户本地的摄像头等媒体源,那当然改不了远程视频流的分辨率。 |
11
sujin190 168 天前
不过说起来你都收到解码了,转码换更低分辨率确实毫无意义吧,分辨率低搞更高分辨率除非用最近搞出来的超分 AI 算法,否则毫无意义吧,所以既然发送端不支持改分辨率改码率,你这个需求本身就毫无意义了吧
|
12
IvanLi127 168 天前
你改播放的分辨率...这字面意思真的就是改 video 宽高就行了,你问题描述不准确呀
|