问题描述
我已经在服务器上运行了Janus,它工作正常,但我有点 努力寻找一种在Janus服务器上流式传输的方法,我无法 在这里找到任何代码段,我正在使用Vue.js进行开发 有任何图书馆可以流传Janus吗?我只需要一个样品。
解决方法
Janus Gateway 有一个流媒体插件。您需要启用该插件并使用 gstreamer 或 ffmpeg 等软件将视频数据传输到流媒体插件。 问答展示了如何在 Raspberry Pi 上执行此操作。 https://superuser.com/questions/1458442/h264-stream-to-janus-using-ffmpeg-on-raspberry-pi
简短摘要如下。
设置 Janus 网关流媒体插件
流媒体插件配置文件是/opt/janus/etc/janus/janus.plugin.streaming.jcfg
。 (official documentation)
您可以找到几个示例配置。例如,
rtp-sample
通过 RTP 接收 VP8/Opus 视频流数据。
如果您想流式传输 H.264 视频,您可以编辑配置以添加此设置。
h264-sample: {
type = "rtp"
id = 10
description = "H.264 live stream"
audio = false
video = true
videoport = 8004
videopt = 126
videortpmap = "H264/90000"
videofmtp = "profile-level-id=42e01f;packetization-mode=1"
secret = "somesecretid"
}
修改配置后,需要重启Janus网关。
开始视频流
您可以通过 RTP 将视频数据发送到 Janus 流媒体插件。例如,如果你有 FFMpeg,你可以这样做。
$ ffmpeg \
-f v4l2 -thread_queue_size 8192 -input_format yuyv422 \
-video_size 1280x720 -framerate 10 -i /dev/video0 \
-c:v h264_omx -profile:v baseline -b:v 1M -bf 0 \
-flags:v +global_header -bsf:v "dump_extra=freq=keyframe" \
-max_delay 0 -an -bufsize 1M -vsync 1 -g 10 \
-f rtp rtp://127.0.0.1:8004/
此命令从 /dev/video0
和
请注意视频参数和输出 RTP 端口号(上例中的 8084
)应与 Janus 流媒体插件配置相对应。
准备 Vue.js 前端
下一步是前端。您可以使用 Janus 网关中捆绑的 janus.js 创建 Web 前端以查看流媒体。如 official documantation 中所述,您可以使用 janus.js 作为 JavaScript 模块。但是当你想从 Vue.js 使用它时,你需要 export-loader。
例如,您可以创建 Vue.js2 项目并像这样添加 janus.js。
$ vue create mystreaming
$ cd mystreaming
$ yarn add git://github.com/meetecho/janus-gateway.git
$ yarn add exports-loader --dev
要添加 Webpack 配置,您需要创建包含以下内容的 vue.config.js
文件。
const webpack = require('webpack')
module.exports = {
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({ adapter: 'webrtc-adapter' })
],module: {
rules: [
{
test: require.resolve('janus-gateway'),loader: 'exports-loader',options: {
exports: 'Janus',},}
]
}
}
}
然后,您可以像这样从 Vue.js 模块导入 Janus
对象。
import { Janus } from 'janus-gateway';
然后您可以使用 janus.js 并使用 APIs 接收流式视频数据。
我上传了 example Vue.js project,这可能也对您有帮助。