我有使用节点媒体服务器的node.js服务器:
const NodeMediaServer = require('node-media-server');
const config = {
rtmp: {
port: 1935,
chunk_size: 60000,
gop_cache: true,
ping: 30,
ping_timeout: 60
},
http: {
port: 8000,
allow_origin: '*'
}
};
var nms = new NodeMediaServer(config)
nms.run();我还有一段视频是这样从我的电脑里流出来的:
ffmpeg -re -i video.mp4 -c:v libx264 -preset veryfast -tune zerolatency -c:a aac -ar 44100 -f flv rtmp://localhost/live/STREAM_NAME在HTML上,我可以观看视频:
<script src="https://cdn.bootcss.com/flv.js/1.5.0/flv.min.js"></script>
<video id="videoElement" muted></video>
<script>
if (flvjs.isSupported()) {
var videoElement = document.getElementById('videoElement');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'http://localhost:8000/live/STREAM_NAME.flv'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
</script>没关系,但我想在这个流中添加一些文本,比如字幕(但它们实际上不是字幕,而是随机文本),并希望从HTML或Javascript中访问这些数据。我怎么能这么做?由于同步问题可能会发生,所以我不能设置另一个服务器来发送数据。
发布于 2020-10-27 12:57:59
您可以通过多种方式向视频中添加文本--最常见的可能是:
下面是一个使用时间触发文本的简单示例--您可能希望对其进行更新,以避免检查每个“onTimeUpdate”事件上的所有内容,并可能将文本放在视频本身之上,但这给出了一个基本机制如何工作的示例:
var vid1 = document.getElementById("MyVid1")
var textBox = document.getElementById("textbox")
var firstTextTime = 3
var secondTextTime = 6
var thirdTextTime = 9
vid1.ontimeupdate = function() {
if (vid1.currentTime > thirdTextTime) {
textBox.innerHTML = "Third message"
} else if (vid1.currentTime > secondTextTime) {
textBox.innerHTML = "Second message"
} else if (vid1.currentTime > firstTextTime) {
textBox.innerHTML = "First message"
}
};<p id= "textbox">
Start Message.
</p>
<video id="MyVid1" width="320" height="176" autoplay controls preload="auto">
<source src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4" type="video/mp4">
Your browser does not support this video format
</video>
https://stackoverflow.com/questions/64535985
复制相似问题