簡體   English   中英

在HTML頁面中播放h.264視頻流

[英]Play h.264 video stream in html page

我在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文件(我也已經在Windows 8和Chrome上進行了測試)。 我只是使用ffmpeg錄制屏幕10秒鍾並生成.mp4視頻(請參見下文)。

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

然后使用以下代碼片段播放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重定向h.264 mpegts流而得到的。/ffmpeg-t ./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 - > ~/Workspace/file.ts

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)

我認為yuv444p不能在任何瀏覽器的<video>標記中播放。

您可能需要一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM