V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Geo200
V2EX  ›  问与答

关于 html video 标签播放视频的问题求助, GPT 实在问不出来了

  •  
  •   Geo200 · 163 天前 · 772 次点击
    这是一个创建于 163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在做一个 webrtc 的应用,video 标签接收的是一个远程的流媒体信息,我现在的需求是可以修改播放视频的分辨率,网上推荐使用的方法都是使用track.applyConstraints的方式去修改,但我试了好像都没生效,甚至有说直接修改 video 的 witdh 和 height 就可以修改分辨率的(这种明显不对吧),目前主流视频网站都是有提供切换分辨率的操作,现在求助有熟悉影音开发的大佬正确的做法是什么,谢谢~

    第 1 条附言  ·  163 天前
    找到跟发送端协商分辨率的方法了,已经成功将 1080p 修改到 720p 。

    总结:修改源分辨率还是得靠发送端处理,接收端不要妄想自己改分辨率。感谢各位大佬的指点,今天又学习到新的东西,结贴!
    12 条回复    2024-06-06 12:19:41 +08:00
    zack5337
        1
    zack5337  
       163 天前
    这个不应该是用户去重新请求不同分辨率的视频流
    iOCZS
        2
    iOCZS  
       163 天前
    这个是对的啊,可以修改自己上传的视频流分辨率:
    ```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.
      });
    });
    ```
    Geo200
        3
    Geo200  
    OP
       163 天前
    @zack5337 如果对方发的是 1080p 的视频流,接收端只能播放 1080p 是吧?
    Geo200
        4
    Geo200  
    OP
       163 天前
    @iOCZS 谢谢,这个不太适用我的场景,我只处理接收,对方发送的控制不了
    iOCZS
        5
    iOCZS  
       163 天前
    @Geo200 我很欣赏你有勇气提这种需求
    pangxiaojian
        6
    pangxiaojian  
       163 天前
    各种不同的分辨率,针对的源 ur 是不一样的,切换分辨率是直接请求新的 ur 就行了,如果没有多个不同分辨率的源,怎么改都没用啊?那有本地自动调整分辨率的
    xu455255849
        7
    xu455255849  
       163 天前
    API 肯定有效的,无效就是你们的问题,服务端的问题可能更大,毕竟你只要改个参数就好了
    如果服务端推流不支持其它分辨率 你怎么改也没有用,建议用 exact width height 这样不支持的话就直接报错了,你也知道它不支持
    mandex
        8
    mandex  
       163 天前
    对方发送的视频流是固定的分辨率,你这边选择的意义是什么啊?
    sujin190
        9
    sujin190  
       163 天前
    接收端修改的意思应该是向对方发送申请新分辨率的视频流吧,应该不是让本地转码改变分辨率吧,看你这情况对方肯定不接受啊,所以显然改不了,视频分辨率不重新转码应该是改不了分辨率的吧,否则各大视频网站也就不需要为每种分辨率在服务端提前转码并单独保存了,或许你应该在收到视频流后先用媒体扩展转个码再发送给 video 标签吧
    ysc3839
        10
    ysc3839  
       163 天前 via Android
    你都说了是接收远程视频流,那当然是要在发送端改呀。
    applyConstraints 你去搜索一下,MDN 的页面应该是排在前面几个的,进去能明显看到是先 mediaDevices.getUserMedia 再修改分辨率,而 getUserMedia 是请求用户本地的摄像头等媒体源,那当然改不了远程视频流的分辨率。
    sujin190
        11
    sujin190  
       163 天前
    不过说起来你都收到解码了,转码换更低分辨率确实毫无意义吧,分辨率低搞更高分辨率除非用最近搞出来的超分 AI 算法,否则毫无意义吧,所以既然发送端不支持改分辨率改码率,你这个需求本身就毫无意义了吧
    IvanLi127
        12
    IvanLi127  
       163 天前
    你改播放的分辨率...这字面意思真的就是改 video 宽高就行了,你问题描述不准确呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2865 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.