Edward.W 2023-02-03 22:07 采纳率: 100%
浏览 41
已结题

h264流转mp4或者hlv流,网页实时播放

使用scrcpy的开源框架,获取到的将h.264视频流转码为其他视频流时遇到了麻烦。
因为scrcpy的框架获取到的是h.264裸流,在浏览器上没法直接播放,因此一开始我是使用了h264-converter的ts包进行解析,但是经常会遇到解析错误。所以想想还是得先转码成hlv还是mp4格式的数据流才行,查看了下ffmpeg的一些demo,好像都是文件转文件的,想问一下得怎么流转流然后在web上进行播放。
用代码块功能插入代码,请勿粘贴截图。

尝试过node的方法调用本地的FFMPEG进行解码,流到流的转码,虽然可以,但是延迟有1-2s左右

 function DecodeH264ByteToFlv(){
        //ffmpeg -r 30 -i .\android.264 -c:v libx264 -vcodec copy 'C.flv'
        ffmpeg = spawn('ffmpeg', [
            '-r', '30',
            '-i', '-',
            '-c:v',
            'libx264',
            '-vcodec', 'copy',
            '-f', 'flv',
            // 'abc.flv'
            'pipe:1'
        ])
        ffmpeg.stdin.on('error', (e) => {
            console.log('FFmpeg STDIN Error', e);
          });
          
        // FFmpeg outputs all of its messages to STDERR.  Let's log them to the console.
        ffmpeg.stderr.on('data', (data) => {
            console.log('FFmpeg STDERR:', data.toString());
        });
 
        ffmpeg.stdout.on('data', (data)=>{
        //output flv stream
            console.log(data)                         
        });
    }

运行结果及详细报错内容

延迟性太高了。想问一下又没有什么办法?

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

尝试过的方法主要有两种,

  1. 浏览器解码播放,但是只在chrome上可以,safari或者firefox基本就是PPT一样,而且也会有解码错误卡死的情况出现。
  2. 在服务端转码,但是现在服务端都转成golang了,不知道怎么写,想问一下又没有什么办法?
我想要达到的结果

想要知道有没有什么办法实时再浏览器播放?或者说又没有h264流封装成其他格式流的golang库或者代码?

  • 写回答

2条回答 默认 最新

  • 快撑死的鱼 2023-02-04 02:22
    关注

    回答不易,求求您采纳点赞哦

    在解决这个问题之前,可以考虑几个因素:

    • 是否必须使用浏览器作为播放器,是否有其他的播放软件可以使用。

    • 转码的过程是否可以在客户端进行。如果可以,这样可以减小服务器的负担。

    如果必须使用浏览器播放,可以尝试使用MSE(Media Source Extension),它是一种被广泛支持的API,可以在浏览器上播放媒体流。

    如果客户端转码太慢,可以考虑使用服务器来进行转码。可以使用开源的软件FFmpeg或GStreamer进行转码,然后在浏览器上播放。

    如果需要使用GoLang进行服务器端转码,可以使用Go-FFmpeg或Go-GStreamer等库,它们都支持在GoLang中使用FFmpeg和GStreamer进行转码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月18日
  • 已采纳回答 2月10日
  • 创建了问题 2月3日

悬赏问题

  • ¥15 使用canvas生成26个英文字母
  • ¥15 请教一个关于镜头标定,棋盘格格子大小的问题(畸变测试)
  • ¥15 el-table输入多维数组怎么实现
  • ¥15 安装GroudingDINO RuntimeError: Error compiling objects for extension
  • ¥15 关于推送项目到github的问题
  • ¥15 急!C++指针编写相关的问题
  • ¥15 kerberos身份认证配置问题
  • ¥30 用python写一个多签情况下波场的代理资源和回收资源
  • ¥15 怎么在matlab中输出显示泵的流量-扬程和管路损失与流量均在一个表格里
  • ¥15 matlab学期例题代码答疑