我将HTML5视频标签嵌入到我的网站中,源是gstreamer流。
我有一个在gst 0.10上运行的管道:
gst-launch-0.10 -v videotestsrc ! theoraenc ! oggmux ! queue ! tcpserversink port=8080 sync-method=2
Run Code Online (Sandbox Code Playgroud)
我可以像这样通过vlc连接到此流:
vlc tcp://localhost:8080
Run Code Online (Sandbox Code Playgroud)
而且,我还可以在HTML5视频标签中使用该URL,并按预期显示视频。
现在,我尝试将其改编为GST 1.0:
gst-launch-1.0 -v videotestsrc ! theoraenc ! oggmux ! queue ! tcpserversink port=8080 sync-method=2
Run Code Online (Sandbox Code Playgroud)
同样,我可以使用vlc连接到流,但是我不能在视频标签中使用此流。
这让我发疯,我将管道缩减到最低限度,而且我不明白为什么它不起作用。
为什么它可以在旧的GST和VLC中使用,但不能与视频标记中的新GST一起使用?
我有一个罗技网络摄像头,当我列出它显示的可用格式(以及其他)以下内容:
Index : 0
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUV 4:2:2 (YUYV)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Run Code Online (Sandbox Code Playgroud)
所以现在我要捕获300帧,分辨率为640x480 @ 30fps,jpeg压缩它们并将其复用到avi.捕获300帧@ 30fps应该会产生10秒的电影并且需要10秒才能录制,但在我的情况下,需要大约40秒才能获得300帧但是它会产生预期的10秒视频.
这是我的管道:
gst-launch-1.0 -v v4l2src device=/dev/video0 num-buffers=300 ! \
"video/x-raw,width=640,framerate=30/1" ! jpegenc ! avimux ! \
filesink location=output.avi
Run Code Online (Sandbox Code Playgroud)
我用fpsdisplaysink检查了,很多帧被删除了:
last-message = rendered: 48, dropped: 250, fps: …Run Code Online (Sandbox Code Playgroud)