如何在铬中播放MPEG-TS



我有一个视频,我想在其中向用户展示("用户",因为他可以访问Chrome PC或Chrome android(。

如果可能的话,使用 html5 标签会很好,但由于它 TS 它不能......

因此,我需要更好的建议来了解如何播放它们,而不是打开vlc并复制并过去文件路径。 但这是个糟糕的主意...

我看到了这个添加了VLC协议(vlc://链接(的库,但我更喜欢使用服务器端解决方案。

我上传了一个示例文件,您可以在此处看到。

我不想将所有文件转换为另一种格式。

编辑: 如果将来有人来这里,在接受@szatmary建议后,GitHub 上有一些项目可以这样做,但是如果不进行部分转换(以某种方式(,我就无法使用其中任何一个,并且由于我正在使用非常大的文件(10G+(和极弱的计算机(单个 1.8 CPU 内核(,我设法只显示音频, 不是一个真正的解决方案,但满足了我的需求。

将文件转换为mp4。如果 ts 文件是 h.264+aac,您可以在 javascript 中转换为 fmp4 并通过媒体源扩展播放,但这需要大量代码才能正常工作。

你可以直接用索引m3u8文件播放ts,如果没有,你可以制作m3u8文件,这只是ts文件的索引。

一些浏览器喜欢边缘你直接玩ts。参考此答案

<video width="352" height="198" controls>
<source src="index.m3u8" type="application/x-mpegURL">
</video>

对于其他浏览器,如火狐和铬,您需要将ts馈送到带有js的视频中,例如video.js

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>videojs-contrib-hls embed</title>
<link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
<script src="https://unpkg.com/video.js/dist/video.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<h1>Video.js Example Embed</h1>
<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="268" 
data-setup='{}'>
<source src="index.m3u8" type="application/x-mpegURL">
</video>
<script>
</script>
</body>
</html>

除了播放ts文件外,您还可以将其转换为mp4。

您可以使用管道将这些 ts 文件放入 ffmpeg 并输出 mp4 文件。

cat *.ts | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4

或者如果你的文件名没有顺序,

grep .*.ts index.m3u8 | xargs cat | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4

我已经尝试了所有描述的解决方案,发现Chrome不支持mpeg-ts,无论是否支持HPL Player插件。所有解决方案仅支持 mpeg4。太糟糕了,因为通过 ffmpeg 将流从 mpeg2 转换为 mpeg4 会消耗我 98% 的 CPU,而使用"-v copy"选项只需要不超过 4%。

Safari 确实在没有任何插件的情况下原生支持 mpeg2,例如这个 js 工作正常:

<body>
<video width="640" height="480" controls autoplay
src="http://<streaming-server>:port/path-to-index.m3u8">
</video>
</body>  

最新更新