精华内容
下载资源
问答
  • mux mpegts stream
    2019-02-26 09:14:08
    1. Remmaping of PIDs can be done in ffmpeg.
      fmpeg -i input -c copy -f mpegts \
      -mpegts_original_network_id 0x1122 \
      -mpegts_transport_stream_id 0x3344 \
      -mpegts_service_id 0x5566 \
      -mpegts_service_type 0x1 \
      -mpegts_pmt_start_pid 0x1500 \
      -mpegts_start_pid 0x150 \
      -metadata service_provider="Some provider" \
      -metadata service_name="Some Channel" \
      -tables_version 5 \
      sample.ts
    2. Remuxing can be done via ffmpeg using [muxrate] parameter
    3. Changing RTP to UDP and to RTP can be done using multicat tool https://www.videolan.org/projects/multicat.html
    更多相关内容
  • mpegts-流光 介绍 一个简单的纯 java MPEG-TS 流媒体,具有流畅的 API。 例子: // Set up packet source MTSSource movie = MTSSources . from( new File ( " /Users/abaudoux/movie.ts " )); // Set up...
  • mpegts.js日本语中文说明用TypeScript和JavaScript编写HTML5 MPEG2-TS流播放器。 mpegts.js针对低延迟的实时流播放进行了优化,例如DVB / ISDB电视或监视摄像机。 该项目基于flv.js。 概述mpegts.js的工作原理是将...
  • 通过fmpeg传传输mpeg-ts视频,在嵌入式arm 下测试可以编译通过
  • mpeg2-video

    2018-08-06 15:05:11
    MPEG2 VIDEO 官方spec, 13818-2 ,视频部分详细文档。
  • mpegts介绍

    千次阅读 2020-05-31 22:23:43
    这里主要介绍FFmpeg 中mpegts这个封装格式,希望可以对大家有所帮助。 介绍: mpegts : 对应的是封装层代码,在解码过程中对应的是下面的解封装。经过解封装之后,获得音视频对应的es数据。 我们看电视的...

    声明:
        这里主要介绍FFmpeg 中mpegts这个封装格式,希望可以对大家有所帮助。

    介绍:

        mpegts : 对应的是封装层代码,在解码过程中对应的是下面的解封装。经过解封装之后,获得音视频对应的es数据。

     

        我们看电视的时候之所以可以每次切台都可以接着看,而DVD换碟片就要重头开始看,这是因为电视在切台后会发送PAT和PMT。通过PAT我们可以确定PMT的pid,同时接收有与之pid匹配的PMT,而通过PMT我们可以知道将要获得的音视频的pid。之后我们接收与PMT中相对应的pid的音视频数据。而对于一些不规范的服务器会在正常播放的时候改变pid或者音视频的格式,这个时候就会出现播放卡住的现象。这个时候我们可以通过抓取网络包,同时从网络包中提取卡住前后的ts切片对比就可以了。

        TS ---------》 PES------------》ES 他们关系如下图:

     

     

    TS:    

    而说到mpegts就要介绍ts的格式。如下图:

     

     

        开始的一个字节为同步字节,对于ts包来说是以0x47开始的。

        之后一个字节中的第二位用来标识是不是开始标识,而对于PES来说proload unit start indicator用来标识是不是PES的其实位置,对于每个PES这个标识位都会设置为1.

        而之后的PID占用了13位。他用来标识不同的pid。PAT一般对应的pid为0x0,而在PAT中会指明PMT的pid。而解析完PMT的时候,他也会指明对应接收的音视频的pid。而之后接收的ts包中就是根据这个PID来区分音视频,并从中取出对应的数据放到PES的数据中。

        transport scrambling control标识位一般用来标识加密使用。

        在ts包中,proload 区可能是数据,也有可能不是数据,当不是数据的时候就需要adaptation field来填充0xff来,而区分是否有adaptation field 就要看 adaptation field control 这个标识位了。而对于PAT和PMT来说是没有adaptation field 的。同时可以通过adaptation field control为不同的值来区分proload中为什么样的值。

    •         0x1 : proload为纯数据(为音视频数据)
    •         0x2 : 为adaptation field数据,
    •         0x3 : 既有音视频数据又有adaptation field数据。

     

        而如果有adaptation数据,我们可以通过ts包的第5字节来获取adaptation field的长度。而adaptation field其他的部分需要继续分析标志位。这里还没有详细看。

    PES:

    而当ts包中adaptation field control为0x1或者0x3时,表示有数据,而这个时候的数据为PES数据。通常情况下adaptation field control为0x1,而在PES首个包或者最后一个包的时候,adaptation field control可能为0x3. 而解析PE数据需要看下面的结构体:

     

     

        在PES包头的三个字节为PES的起始码标志,对于PES来说为0x00 00 01

        之后的第四字节 stream id 为数据流识别:这个时候通常使用这个id来表示是视频流还是音频流或者是其他的流。

        之后的第五字节和第六字节 PES Packet Length 表示了PES的包长。

     

        之后的两个字节,第七和第八字节是PES包头的识别标志,其中包括:

    •         10 的开始表示
    •         是否 PES加扰控制(加密传输),
    •         数据对齐指示
    •         版权
    •         pts/dts标志位:通过获得dts和pts来获得解码顺序和显示顺序。
    •         再之后的一个字节包含了PES的包头长度。
    •         而之后的区域就是各种信息区,其中有包括pts ,dts等的信息

        而PES其实就是将ES数据打包,而PES的数据部分就是ES数据了。而通过mpegts 我们可以分析ts包头来获得各种组成PES需要的数据,而同时将ts包中数据的部分放到PES包中。同样对于PES的分析可以获得关于ES的各种数据,而之后将PES数据部分提取出来就是我们需要的音视频数据了。而从ts包到es数据,这个过程就是一个解复用的过程。

     

    同时强烈建议:

    上面这些需要结合mpegts.c的代码来看。

    参考文章:

    多媒体文件格式(四):TS 格式 https://www.cnblogs.com/renhui/p/10362640.html

    流媒体基础知识(二) mpegts详解 https://blog.csdn.net/WangZekun_wolf/article/details/89532912

    ffmpeg--mpegts.c解析PES https://blog.csdn.net/evsqiezi/article/details/79625619

    MPEG-2系统中ES,PES,PS以及TS流的介绍 https://blog.csdn.net/leopard21/article/details/24818715

    mpeg-ts详细介绍 https://wenku.baidu.com/view/8f9c316caf1ffc4ffe47acae.html

    上面这些需要结合mpegts.c的代码来看。

     

    展开全文
  • 解析Apple HLS MPEG传输流段的Javascript库 用法(Node JS) npm install --save hls-ts 该库实现Writable流接口并充当“接收器”。 例如,要下载并解析HLS MPEG传输流段: const request = require("request"); ...
  • MPEG2-TS(Transport Stream“传输流”;又称TS、TP、MPEG-TS 或 M2T)是用于音效、图像与数据的通信协定,最早应用于DVD的实时传送节目。
  • ffmpeg -i 1.mp4 -f mpegts -codec:v mpeg1video -s 640x1040 -b:v 1500k -r 30 -bf 0 -codec:a mp2 -ar 44100 -ac 1 -b:a 128k out.ts 原始视频 导出尺寸 导出码率 导出帧频 音频采样率 音频比特率 ps:相关...

    最近研究了下视频自动播放,无控制条问题,记录下。

    文章已同步至我的 github https://github.com/zhangqiang0821/auto-play-video

    尝试解决

    加autoplay
    “视频自动播放”这个需求是ok的,那我就在video标签上加个autoplay属性嘛,在PC端浏览器里面试了一下,运行流畅,没有遇到什么问题,但是放在手机浏览器里面打开,就跟没设置autoplay是一样的。

    监听canplay
    那不行的话,我在页面加载完成的时候,监听video的canplay,然后执行play(),应该可以运行了吧?然而放到手机里一看,还是不行。

    <video id="video" src="video.mp4" controls></video>
    var video = document.querySelector('#video');
    video.addEventListener('canplay', function () {
       video.play();
    })
    

    手动触发播放
    借助一个额外的动作去引导与用户发生一次交互,触发视频播放,效果是可以,但是不满足真正进入页面就播放视频的需求,

    $('html').one('touchstart', function() {
          $('video')
            .get(0)
            .play()
        })
    

    方案

    1、下载 jsmpeg.js

    ffmpeg : http://ffmpeg.zeranoe.com/builds/ win64

    https://evermeet.cx/ffmpeg/ mac OS X 64

    jsmpeg.js :https://github.com/phoboslab/jsmpeg

    2、使用
    win 64 版为例:
    下载 ffmpeg 后,解压 ffmpeg,进入 bin 目录看到几个 exe 这就是处理程序。
    下载解压后:
    在这里插入图片描述

    win+r 输入 cmd 打开命令窗口,转到 bin 目录,并输入转码代码:
    ffmpeg -i demo1.mp4 -f mpegts -codec:v mpeg1video -codec:a mp2 -b 0 ts.ts

    画质清晰些的转码代码:
    ffmpeg -i niudan.mp4 -f mpegts -codec:v mpeg1video -codec:a mp2 -q 0 out22.ts

    demo1.mp4 是我们要原始视频 (这里我直接把视频放在 bin 目录里)

    回车运行后,bin 目录输出 ts.ts

    更多参数配置命令

    ffmpeg -i 1.mp4 -f mpegts -codec:v mpeg1video -s 640x1040 -b:v 1500k -r 30 -bf 0 -codec:a mp2 -ar 44100 -ac 1 -b:a 128k out.ts
    原始视频                导出尺寸  导出码率 导出帧频        音频采样率   音频比特率

    ps:相关参数请参看https://github.com/phoboslab/jsmpeg 文档

    播放控制:

    play() – start playback
    pause() – pause playback
    stop() – stop playback and seek to the beginning
    destroy() – stops playback, disconnects the source and cleans up WebGL and WebAudio state. The player can not be used afterwards.
    volume – get or set the audio volume (0-1)
    currentTime – get or set the current playback position in seconds

    例如 player.pause()

    注意:

    1. 清晰度和原视频差不多的条件下,码率几乎需要多设置 1 倍;
    2. 跨域问题
      jsmpeg 请求 ts 媒体文件,使用的是 XMLHttpRequest,且同时使用了 setRequestHeader(“Range”, “bytes=xxxx”); 来请求切割数据,这样拿到我们设定 xxx 的字节的数据后,我们可以及时对数据进行处理(jsmpeg 设置参数 chunkSize 就是这里的 xxx)。
      因为跨域,切割数据 服务器认为这是对文件进行二次操作所以被拒绝。
    3. demo必须放在服务器上面跑才能正常加载ts文件,如果是在本地的话,不能直接拖进浏览器运行,需要起个本地服务器
    4. ts文件编码方式必须为MPEG编码,考虑到现在先进的ts编码方式是H.264了,之前用H.264编码的ts发现播放不了

    那么对服务进行配置一下 :我这里使用的 serve 工具 跑个服务即可

    serve 实例:

    1. 首先需要安装 node
    2. 使用 npm 命令行来安装 serve
      npm install -g serve
    3. 安装完成后,使用 serve -s .\dist 进入文件文件目录就可以了
    <body>
        <canvas id="video-canvas"></canvas>    
        <script type="text/javascript" src="jsmpeg.min.js"></script>
        <script type="text/javascript">
        window.onload=function(){
            var canvas = document.getElementById('video-canvas');
            var url = 'demo-ts.ts';
            //var url = 'ws://'+document.location.hostname+':8082/';
            var player = new JSMpeg.Player(url, {canvas: canvas,loop: true, autoplay: true});
        }
        </script>
    </body>
    
    

    总结

    其实关于浏览器video的问题困扰了我很久,昨日在segment上浏览到“chrome66 禁止自动播放后,有什么比较好的方法实现audio的自动播放吗”这样一个提问的时候,进去看到回答,突然想起video是不是也是一样的情况,今天看了下,果然是类似的,解了很久的疑问,所以勉励自己一定要善于发现并举一反三。
    上面提到的不论是解决方案或者说补充的,大概能解决一大半手机浏览器视频相关的问题,剩下的问题有机会再补充。

    参考链接:
    chrome66 禁止自动播放后,有什么比较好的方法实现audio的自动播放吗
    微信Android自动播放视频(可交互,设置层级,无控制条,非X5)ffmpeg,jsmpeg.js,.ts视频
    mac osx 下 homebrew安装
    mac 系统安装使用 ffmpeg
    HTML5音视频播放(Video,Audio)和常见的坑处理
    video在微信和QQ浏览器中不全屏播放解决

    展开全文
  • 解析mpegts

    千次阅读 2016-10-09 19:20:54
    数字电视当中接触最多的还是ts流,以前使用ffplay播放过录制的ts流,但却不知道在ffmpeg... 分析的源代码在ffmpeg-0.5/libavformat/mpegts.c当中,从这个文件最下面开始: AVInputFormat mpegts_demuxer = {  "mpeg
    数字电视当中接触最多的还是ts流,以前使用ffplay播放过录制的ts流,但却不知道在ffmpeg当中ts流是如何被解析出来的,今天花点时间对ffmpeg当中ts流的解析过程做了一个简单分析。
         分析的源代码在ffmpeg-0.5/libavformat/mpegts.c当中,从这个文件最下面开始:
    AVInputFormat mpegts_demuxer = {
        "mpegts",
        NULL_IF_CONFIG_SMALL("MPEG-2 transport stream format"),
        sizeof(MpegTSContext),
        mpegts_probe,
        mpegts_read_header,
        mpegts_read_packet,
        mpegts_read_close,
        read_seek,
        mpegts_get_pcr,
        .flags = AVFMT_SHOW_IDS|AVFMT_TS_DISCONT,
    };

    mpegts_probe :这函数一看就知道是检测数据格式是不是mpegts格式的。
    mpegts_read_header :读数据头信息,比如在ts流当中的数据包大小,还ts流中的节目信息,sdt表,pmt表,video pid,audio pid等等,以便后面读数据时使用。
    /* read the first 1024 bytes to get packet size */
    pos = url_ftell(pb);
    len = get_buffer(pb, buf, sizeof(buf));
    if (len != sizeof(buf))
        goto fail;
    ts->raw_packet_size = get_packet_size(buf, sizeof(buf));
    if (ts->raw_packet_size <= 0)
        goto fail;
    上面这几行代码是从数据流当中读了5 * 1024个字节来判断数据包的大小 raw_packet_size ,一般这个值是188,当然如果这个ts流不是标准和dvb ts流的话,那当然会不一样的。
    /* first do a scaning to get all the services */
    url_fseek(pb, pos, SEEK_SET);
    mpegts_scan_sdt(ts);

    mpegts_set_service(ts);

    handle_packets(ts, s->probesize);
    /* if could not find service, enable auto_guess */
    ts->auto_guess = 1;
    上面这几行代码是扫描节目信息,首先 mpegts_scan_sdt 当中调用 mpegts_open_section_filter 设置了一个SDT表的filter,SDT表当中会有节目的名子,提供商名子等等。接着在 mpegts_set_service 当中又设置 mpegts_open_section_filter 设置了一个PAT表filter,PAT表当中会存放节目的SID, PMT_PID,从而可以取到对应的PMT表,然后解板出VIDEO PID, AUDIO PID来, handle_packets 就不用看了,上面设置了filter,这里紧跟着就得让filter工作起来了。
    pat_cb:
    ……
    av_new_program(ts->stream, sid);

    ts->stop_parse--;
    mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);
    add_pat_entry(ts, sid);
    add_pid_to_pmt(ts, sid, 0); //add pat pid to program
    add_pid_to_pmt(ts, sid, pmt_pid);
    ……
    pmt_cb
    ……
    /* now create ffmpeg stream */
    switch(stream_type) {
    case STREAM_TYPE_AUDIO_MPEG1:
    case STREAM_TYPE_AUDIO_MPEG2:
    case STREAM_TYPE_VIDEO_MPEG1:
    case STREAM_TYPE_VIDEO_MPEG2:
    case STREAM_TYPE_VIDEO_MPEG4:
    case STREAM_TYPE_VIDEO_H264:
    case STREAM_TYPE_VIDEO_VC1:
    case STREAM_TYPE_VIDEO_DIRAC:
    case STREAM_TYPE_AUDIO_AAC:
    case STREAM_TYPE_AUDIO_AC3:
    case STREAM_TYPE_AUDIO_DTS:
    case STREAM_TYPE_AUDIO_HDMV_DTS:
    case STREAM_TYPE_SUBTITLE_DVB:
        if((stream_type == STREAM_TYPE_AUDIO_HDMV_DTS && !has_hdmv_descr)
        || (stream_type == STREAM_TYPE_VIDEO_DIRAC    && !has_dirac_descr))
            break;
        if(ts->pids[pid] && ts->pids[pid]->type == MPEGTS_PES){
            pes= ts->pids[pid]->u.pes_filter.opaque;
            st= pes->st;
        }else{
            if (ts->pids[pid]) mpegts_close_filter(ts, ts->pids[pid]); //wrongly added sdt filter probably
            pes = add_pes_stream(ts, pid, pcr_pid, stream_type);
            if (pes)
                st = new_pes_av_stream(pes, 0);
        }
        add_pid_to_pmt(ts, h->id, pid);
        if(st)
            av_program_add_stream_index(ts->stream, h->id, st->index);
        break;
    default:
        /* we ignore the other streams */
        break;
    }
    ……
    得到每个video, audio的PID,然后就设置成pes filter,到这里基本上获取流的基本信息就已经结束了。下面再来看使用最多的一个函数 mpegts_read_packet
    mpegts_read_packet
          handle_packets
     这是我们刚刚跳过去的函数。
                 handle_packet  这函数是处理单个包的,所以后面没有s
                          if (tss->type == MPEGTS_SECTION) {
                                ……
                                write_section_data(s, tss,
                                       p, p_end - p, 0);
                                ……
                         } else {
                                // Note: The position here points actually behind the current packet.
                                tss->u.pes_filter.pes_cb(tss,
                                     p, p_end - p, is_start, pos - ts->raw_packet_size);
                         }

    处理每一个包,如果是section包,就调用 write_section_data ,这个函数里面如果一个PAT, PMT, SDT表已经构成,则会调用刚刚看到的pat_cb, pmt_cb, sdt_cb,分析到这里,已经不用再管section包了,只看pes包,所以一般会调用 tss->u.pes_filter.pes_cb ,这个函数指针到底是什么呢?在函数 add_pes_stream 里面可以看到, mpegts_open_pes_filter 函数的一个参数 mpegts_push_data 就是这里的 tss->u.pes_filter.pes_cb,好,跟到这个函数里面瞧瞧。
    mpegts_push_data
        ……    
        while (buf_size > 0) {

            switch(pes->state) {
            case MPEGTS_HEADER:
            case MPEGTS_PESHEADER_FILL:
            case MPEGTS_PAYLOAD:
                ts->stop_parse = 1;
                return;
        ……

    ts->stop_parse = 1
    意味着一个pes包构成了,所以上面的函数mpegts_read_packet就返回了,这样,一个pes包送上去了,再送到codec去解码,最后送去video或audio输出设置显示了。由些可以看到ts流和avi, mkv这些一样,都是一个容器,真真的数据都是包含在其中的一个一个的串流。
         mpegts.c里面还有几个函数没有提到,但这对于学习原理性的东西不是那么重要,所以暂时先放过吧。
    展开全文
  • MPEG TS流简介

    千次阅读 2019-04-20 17:40:51
    MPEG-TS(Transport stream)即Mpeg传输流定义于ITU-T Rec. H.222.0和ISO 13818-1标准中,属于MPEG2的系统层。MPEG2-TS面向的传输介质是网络和卫星等可靠性较低的传输介质,这一点与面向较可靠介质如DVD等的MPEG PS...
  • Node.js中的MPEG-2 TS解析器。 安装 $ npm install mpeg2ts-parser 例子 var fs = require ( 'fs' ) ; var parser = require ( 'mpeg2ts-parser' ) ( ) ; var m2ts = fs . createReadStream ( 'foo.m2ts' , { ...
  • VideoJs 视频JS包及演示Demo,自己对Demo进行了优化,可以本地直接打开播放。
  • flv.js总结 这两个月来,开展这个flv.js项目学到的新东西还挺多的,从理解flv.js框架,到理解flv视频格式,到理解公司自己的视频格式,当每一步都理解后,整个过程是比较顺利的,下面是我对这个项目的研究流程 (1...
  • 本文实例讲述了JS实现的视频弹幕效果。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang=zh-CN> <head> <meta http-equiv=Content-Type content=text/html; charset=UTF-8> &...
  • mpegts.js,并生成 flv.js 项目将减少维护。 一些吐槽:如何看待B站 (bilibili) 开源 HTML5 播放器内核 flv.js? - 知乎 HLS: hls.js HLS 为苹果原生支持的协议,其它浏览器大部分不兼容,hls.js 是实现在其它平台...
  • flv.js视频播放库基本用法

    千次阅读 2021-07-01 14:59:15
    若需要支持flv回放功能请使用 mpegts.js 假设存在一个 video 元素 <video id="videoElement"></video> 先检测浏览器是否支持 import flvjs from "flv.js" if (flvjs.isSupported()) { ... }
  • 目前有一种解决方案是用mpegts的格式解决。如果考虑用ffmpeg来推流的话,可以使用http格式和udp格式来推流。现在要做的事情是用Netty来转发rtmp到websocket接口上,然后用H5来播放。播放的插件使用jsmpeg这个项目来...
  • -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://127.0.0.1:8081/supersecret 出现下面的文字说明运行正确 打开jsmpeg文件夹里面的view-stream.html页面如果没有问题应该出现下面的画面,到此为止在h5播放...
  • 如题,在CocosCreator中实现了JS插件(调整过的kbengine.js)+kbengine.d.ts,支持组件,当前测试没有什么问题,可能会有一些隐藏的问题。如果遇到问题,麻烦在这里回复,可以将它完善~_~! 支持版本(有组件的版本)...
  • JSMpeg是一个用JavaScript编写...它由MPEG-TS解复用器、WebAssembly MPEG1视频和MP2音频解码器、WebGL和Canvas2D渲染器和WebAudio声音输出组成。JSMpeg可以通过Ajax加载静态文件,并允许通过websockets进行低延迟流传输
  • -q 1 -f mpegts -codec:v mpeg1video -s 320x180 -b:v 150k http://127.0.0.1:8000/supersecret7.打开jsmpeg-master里面的view-stream.html如果播放不出来请修改页面里的js,将路径改成你的本地路径就可以看到你的...
  • hls.min.js

    2019-06-01 16:33:58
    return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/hls.js/dist/",e(e.s=7)}([function(t,e,r){"use strict";function i(){}function a(t,e){return e="["+t+"] >...
  • Node.js视频库/ MP4和FLV解析器/ MP4构建器/ HLS多路复用器 局限性 该库仅适用于使用H.264 / H.265视频编解码器和AAC音频编解码器编码的MP4和FLV视频文件。 安装 $ npm install node-video-lib 用法 解析视频文件 ...
  • entry:"./src/main.ts", 为了让import a from './a'表示引入的是a.ts而不是a.js(webpack默认),在webpack.config.js中添加 resolve:{ "extensions":['.ts','.js','.json']//省略后缀名,注意顺序 }, 3. 需求分析 ...
  • JSMpeg是一个基于JavaScriptMPEG1视频的解码器。如果要做H5端的视频直播,可以考虑使用JSMpeg在移动端进行解码。在H5端做音视频直播,可以使用JSMpeg进行视频解码,这也是最近比较火的H5抓娃娃的主流策略。
  • MPEG2 PS和TS流格式

    千次阅读 2014-08-28 17:23:41
    应该说真正了解TS,还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。  ISO/IEC-13818-1: 系统部分;ISO/IEC-13818-2:...
  • vue项目中引入video.js视频播放器 Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器。 安装 : npm install video....
  • 或者这篇文章安卓全屏问题... 除此之外, 即便采用JS给video设定为容器的宽高这方案, 也会出现难看的播放器控件,这时候不得不人为给视频底部加空白,在通过JS计算适合的高度以挡掉丑陋的播放器控件, 实在苦恼.JSMpeg...
  • 音视频技术开发周刊 | 188

    千次阅读 2021-03-29 00:19:00
    mpegts.js 基于 flv.js 改造而来。 https://github.com/xqq/mpegts.js/blob/master/README_zh.md Chrome现在支持对音频和视频进行实时字幕(在线or离线均可) Google的Chrome浏览器已具有生成实时字幕的功能,从而使...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,337
精华内容 534
关键字:

mpegts.js