使用 Videogular 流 application/octet-stream mime 类型
Stream application/octet-stream mime type with Videogular
我用 NodeJS + Express 做了一个 API,它应该在我们调用 /videos/stream/{id}
路由时发送视频流。这是代码:
router.get('/stream/:id', function(req, res) {
fs.readFile(app.get('path') + '/videos/' + req.params.id + '/video.mp4', function (err,data) {
if (err) { ... }
res.writeHead(200, {
'Content-type' : 'application/octet-stream',
'Content-Length' : data.length
});
res.end(data);
});
});
此代码有效,因为当我将整个 URI 放入浏览器时,我可以使用 VLC 打开流或保存它。
问题是我用Videogular框架看不到视频流。当我 copy/paste 将 "How to start" 代码放入我的 AngularJS 应用程序时,如下所示:
sources: [
{src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.mp4"), type: "video/mp4"},
{src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.webm"), type: "video/webm"},
{src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.ogg"), type: "video/ogg"}
],
这有效,我可以在播放器中看到视频,但是当我用 API 的 URI 替换时:
sources: [
{src: $sce.trustAsResourceUrl("http://localhost:3000/api/videos/stream/556747d8f657a9b81c7f3543"), type: "application/octet-stream"}
],
播放器一直黑屏,没有视频播放,不知道为什么。
我找到了解决方案,但这非常适合我的 API 的工作方式。当视频上传到 API 时,它会自动转换为 MP4。
这是我的配置:
$scope.config = {
sources: [
{src: $sce.trustAsResourceUrl("http://localhost:3000/api/videos/stream/" + data.video._id), type: "video/mp4"}
],
tracks: [{ ... }],
theme: "bower_components/videogular-themes-default/videogular.css",
plugins: {
poster: "http://www.videogular.com/assets/images/videogular.png"
}
};
请注意 type : "video/mp4"
而不是 type : "application/octet-stream"
因为我的 API 将所有内容都转换为 MP4。
当上传的视频是 MP4 时,此代码完美运行。否则,当在 API 上上传和转换非 MP4 视频时,我无法将其流式传输到 Videogular 的播放器中。
TL;DR
我的 API 没有正确转换视频,这就是 Videogular 无法播放某些视频的原因。
我用 NodeJS + Express 做了一个 API,它应该在我们调用 /videos/stream/{id}
路由时发送视频流。这是代码:
router.get('/stream/:id', function(req, res) {
fs.readFile(app.get('path') + '/videos/' + req.params.id + '/video.mp4', function (err,data) {
if (err) { ... }
res.writeHead(200, {
'Content-type' : 'application/octet-stream',
'Content-Length' : data.length
});
res.end(data);
});
});
此代码有效,因为当我将整个 URI 放入浏览器时,我可以使用 VLC 打开流或保存它。
问题是我用Videogular框架看不到视频流。当我 copy/paste 将 "How to start" 代码放入我的 AngularJS 应用程序时,如下所示:
sources: [
{src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.mp4"), type: "video/mp4"},
{src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.webm"), type: "video/webm"},
{src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.ogg"), type: "video/ogg"}
],
这有效,我可以在播放器中看到视频,但是当我用 API 的 URI 替换时:
sources: [
{src: $sce.trustAsResourceUrl("http://localhost:3000/api/videos/stream/556747d8f657a9b81c7f3543"), type: "application/octet-stream"}
],
播放器一直黑屏,没有视频播放,不知道为什么。
我找到了解决方案,但这非常适合我的 API 的工作方式。当视频上传到 API 时,它会自动转换为 MP4。
这是我的配置:
$scope.config = {
sources: [
{src: $sce.trustAsResourceUrl("http://localhost:3000/api/videos/stream/" + data.video._id), type: "video/mp4"}
],
tracks: [{ ... }],
theme: "bower_components/videogular-themes-default/videogular.css",
plugins: {
poster: "http://www.videogular.com/assets/images/videogular.png"
}
};
请注意 type : "video/mp4"
而不是 type : "application/octet-stream"
因为我的 API 将所有内容都转换为 MP4。
当上传的视频是 MP4 时,此代码完美运行。否则,当在 API 上上传和转换非 MP4 视频时,我无法将其流式传输到 Videogular 的播放器中。
TL;DR
我的 API 没有正确转换视频,这就是 Videogular 无法播放某些视频的原因。