【问题标题】:Play h.264 video stream in html page在 html 页面中播放 h.264 视频流
【发布时间】:2017-06-11 11:50:03
【问题描述】:

我在 linux 上使用 ffmpegvlc 通过 HTTP 生成 MPEG 传输流 (mpegts)。基本上ffmpeg 捕获屏幕并使用mpegts 生成h.264 流,然后vlc 用作通过http 传递流的服务器。这就是我设法做到这一点的方法。

ffmpeg -f x11grab -s 1280x800 -r 30 -i :0.0+0,0  -f alsa -ac 2 -i pulse -vcodec libx264 -preset ultrafast -s 1280x800 -threads 0 -f mpegts - | vlc -I dummy - --sout '#std{access=http,mux=ts,dst=:3030}

还有一些关于结果流的有用日志:

Output #0, mpegts, to 'pipe:':
  Metadata:
    encoder         : Lavf57.72.101
    Stream #0:0: Video: h264 (libx264), yuv444p(progressive), 1280x800, q=-1--1, 30 fps, 90k tbn, 30 tbc
    Metadata:
      encoder         : Lavc57.96.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: mp2, 48000 Hz, stereo, s16, 384 kb/s
    Metadata:
      encoder         : Lavc57.96.101 mp2

一切看起来都不错,只是我无法在 HTML 页面中播放流。有人可以指出一些解决方案,要么在 HTML 页面中呈现流,要么更改流类型以使其被呈现。 提前谢谢!

编辑: 我注意到了一些奇怪的事情。 <video> 无法在 Ubuntu 的 Firefox (51.0.1) 上播放 mp4 文件(我还使用 Chrome 在 Windows 8 上进行了测试)。 我只是使用ffmpeg 录制屏幕 10 秒并制作 .mp4 视频(见下文)。

ffmpeg -video_size 1280x800 -framerate 25 -f x11grab -i :0.0+0,0 -t 00:00:10 ~/Workspace/videostream/output.mp4

然后用下面的 sn-p 播放 output.mp4 视频。

<video width="480" height="320" controls="controls">
    <source src="output.mp4" type="video/mp4">
</video>

虽然我可以使用任何其他媒体播放器打开视频,但它根本无法播放。 output.mp4 文件的媒体信息(使用 MediaInfo,v0.7.96)为:

GENERAL: MPEG-4 (Base Media): 1.007 MiB, 10s 0ms; 1 Video stream: AVC; Overall bit rate: 825 Kbps; Writing application: Lavf57.72.101
VIDEO: 2 343 Kbps, 1280*800(16:10), at 25.000 fps, MPEG Video (Version 2) (Main@High 1440)

但是,如果我将 output.mp4 替换为任何其他 .mp4 文件,它会在 Firefox 中播放。因此,这使我得出结论,这不是浏览器问题,而是我利用ffmpeg 的方式。以下是在浏览器中成功运行的正确.mp4 文件的媒体信息。

GENERAL: MPEG-4 (Base Media/Version 2): 48.4 MiB, 2mn 50s; 1 Video stream: AVC; 1 Audio stream: AAC; Overall bit mode rate: Variable; Overall bit rate: 2 385 Kbps;
VIDEO: 2 256 Kbps, 1280*720(16:9), at 25.000 fps, AVC (Main@L3.1) (CABAC / 3 Ref Frames); ISO media produced by Google Inc.
AUDIO:
126 Kbps, 44.1 KHz, 2 channels, AAC (LC), ISO media produced by Google Inc.

这是输出文件的媒体信息,它是使用 ffmpeg 命令和 -pix_fmt yuv420p ./ffmpeg -t 00:00:10 -f x11grab -s 1280x800 -r 30 -i :0.0+0,0 -pix_fmt yuv420p -vcodec libx264 -preset ultrafast -s 1280x800 -threads 0 -f mpegts - &gt; ~/Workspace/file.ts 重定向 h.264 mpegts 流产生的:

GENERAL: MPEG-TS: 2.93 MiB, 9s 960ms; 1 Video stream: MPEG Video; 1 Menu stream: MPEG Video; Overall bit rate mode: Variable; Overall bit rate: 2 465 Kbps; 
VIDEO: 2 343 Kbps, 1280*800(16:10), at 25.000 fps, MPEG Video (Version 2) (Main@High 1440)

【问题讨论】:

  • 使用 WebM/MKV,它应该可以在 &lt;video&gt; 标签中正常播放。

标签: video ffmpeg video-streaming html5-video vlc


【解决方案1】:

我认为 yuv444p 不能在任何浏览器的 &lt;video&gt; 标签中播放。

您可能需要一个 ffmpeg 二进制文件,它可以输出更圆润的 yuv420p 平面。也许您可以将其作为选项传递给 libx264,如下所示:-pix_fmt yuv420p.

编辑: 这对我有用:

"C:\Program Files\VideoLAN\VLC\vlc.exe" screen:// :screen-fps=25 :screen-caching=5000 :sout=#transcode{vcodec=theo,vb=800,scale=1,width=800,height=600,acodec=none}:http{mux=ogg,dst=:8181/desktop} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep

唯一的缺点似乎是性能。它很慢。也许这是特定于 Windows 构建的 VLC,希望它在 Linux 上做得更好。另外,尝试其他编解码器/容器组合,我不知道 Theora 是否适合对桌面捕获进行编码。

在 Chrome (Windows) 中测试

<video controls>
    <source src="http://127.0.0.1:8181/desktop">
</video>

注意:你不必使用 localhost,VLC 会监听

TCP    0.0.0.0:8181

【讨论】:

  • 非常感谢您的回答!我尝试了您的建议,但不幸的是无济于事。我还想指出,我已将vlc 命令'#std{access=http,mux=ts,dst=:3030} 的部分更改为'#std{access=http,mux=mp4,dst=:3030},但再次没有成功。我也在考虑任何 Flash 播放器的选项。到目前为止,我只能使用application/x-vlc-plugin 播放流,这不是一个好的选择。
  • 能否将 mediainfo file.ts 和 file.mp4 的输出添加到问题中? mediaarea.net。我们需要了解您的 ffmpeg 二进制文件产生了什么。
  • 我已经用所有输出文件的媒体信息更新了问题帖。 ffmpeg 二进制文件是使用 ffmpeg 编译指南 (trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu) 编译和构建的。也许我需要以其他方式对视频进行编码,或者错过了 ffmpeg 命令的一些重要参数。
  • video 标签显示“没有找到支持格式和 MIME 类型的视频。”。
  • 我会放弃 ffmpeg 并单独使用 vlc,在这种情况下他们似乎相处得不太好。请参阅我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多