WebRTC开发者社区为开发者提供最新最全的WebRTC资料
目录
  • 首页
  • WebRTC概念与基础
  • WebRTC项目与应用
  • WebRTC教程资料
  • WebRTC开发资源
  • WebRTC源码分析
  • WebRTC服务端开发
  • WebRTC网络与通信
  • WebRTC编码与解码
  • WebRTC问题与缺陷
  • WebRTC-Androd端开发
  • WebRTC-RFC文档

janus Streaming插件推流指南

2020-12-31 05:57:37
 

在janus Steaming插件中,官方提供了三种不同的流传输方法,即:

  1. 由文件(歌曲)产生的按需流:访问此流的不同用户都会从头开始播放该音频文件。
  2. 仍由文件(广播)产生的伪实时流:访问此流的不同用户都将收到相同的音频。
  3. 由gstreamer发起的实时流:对于伪实时流,不同的用户将获得相同的视频画面。

前两个在我们安装完janus后是可以直接播放出来的,第三种则需要我们额外部署rtp推流的程序。

官方使用的是使用GStreamer,但使用了FFmpeg,LibAV或其它也可以。

考虑到FFmpeg在流媒体圈子里名气最大,所以就选它了。

 

一、rtp参数确定

在janus.plugin.streaming.jcfg配置文件里,我们可以找到Steaming插件对rtp流的定义。

  1.  
    rtp-sample: {
  2.  
    type = "rtp"
  3.  
    id = 1
  4.  
    description = "Opus/VP8 live stream coming from external source"
  5.  
    metadata = "You can use this metadata section to put any info you want!"
  6.  
    audio = true
  7.  
    video = true
  8.  
    audioport = 5002
  9.  
    audiopt = 111
  10.  
    audiortpmap = "opus/48000/2"
  11.  
    videoport = 5004
  12.  
    videopt = 100
  13.  
    videortpmap = "VP8/90000"
  14.  
    secret = "adminpwd"
  15.  
    }

从中可以看出:

rtp音频流的端口号是5002,负载类型是111,音频编码为opus格式,音频采样率为48000,音频声道数为2;

rtp视频流的端口号是5004,负载类型是100,视频编码为VP8格式。

 

二、ffmpeg推流

ffmpeg -re -stream_loop -1 -i /home/test.mp4 -an -vcodec libvpx -payload_type 100 -f rtp rtp://127.0.0.1:5004?pkt_size=1200 -vn -acodec libopus -payload_type 111 -ar 48000 -ac 2 -f rtp rtp://127.0.0.1:5002?pkt_size=1200

-re:按照帧率发送,否则会按照最高速率发送
-i:指定输入文件名
-stream_loop:指定循环读取视频源的次数,-1为无限循环
-vcodec( -c:v ):设置视频编解码器,未设置时则使用与输入文件相同之编解码器
-acodec ( -c:a ):设置音频编解码器,未设置时则使用与输入文件相同之编解码器
-f:设置输出格式
-pkt_size:rtp发送的最大长度
-payload_type:rtp的负载类型
-an:不处理音频
-vn:不处理视频
-ar:设置音频采样率
-ac:设置音频声道数量

 

这样生成的rtp流的SDP如下,完全符合janus对rtp流的规定

  1.  
    SDP:
  2.  
    v=0
  3.  
    o=- 0 0 IN IP4 127.0.0.1
  4.  
    s=No Name
  5.  
    t=0 0
  6.  
    a=tool:libavformat 58.29.100
  7.  
    m=video 5004 RTP/AVP 100
  8.  
    c=IN IP4 127.0.0.1
  9.  
    b=AS:200
  10.  
    a=rtpmap:100 VP8/90000
  11.  
    m=audio 5002 RTP/AVP 111
  12.  
    c=IN IP4 127.0.0.1
  13.  
    b=AS:96
  14.  
    a=rtpmap:111 opus/48000/2
  15.  
    a=fmtp:111 sprop-stereo=1

效果如下:

ffmpeg推流唯一的缺陷就是CPU占用率太高,一直是99%,对音视频实时编解码太消耗cpu资源了。

 

三、改进

CPU占用率过高的问题解法如下,

首先本地将MP4封装文件转码为WebM封装:

ffmpeg -i test.mp4 -c:v libvpx -crf 10 -b:v 1M output.webm

MP4封装:H264视频编码 + AAC音频编码

WebM封装:VP8视频编码 + Vorbis音频编码

OGG封装:Theora视频编码 + Vorbis音频编码

 

然后推流时就可以不用再转码了

ffmpeg -re -stream_loop -1 -i /home/output.webm -an -vcodec copy -payload_type 100 -f rtp rtp://127.0.0.1:5004?pkt_size=1200 -vn -acodec copy -payload_type 111 -f rtp rtp://127.0.0.1:5002?pkt_size=1200

By:rasp | WebRTC概念与基础 |

  • 分类目录

    • WebRTC概念与基础 (225)
    • WebRTC项目与应用 (33)
    • WebRTC教程资料 (38)
    • WebRTC开发资源 (13)
    • WebRTC源码分析 (12)
    • WebRTC服务端开发 (23)
    • WebRTC网络与通信 (26)
    • WebRTC编码与解码 (15)
    • WebRTC问题与缺陷 (2)
    • WebRTC-Androd端开发 (2)
    • WebRTC-RFC文档 (1)
  • 最新文章

    • 音视频相关的书籍,多媒体技术
    • SFU级联解决方案——Jitsi
    • SFU级联解决方案——Licode
    • Janus源码分析(6)——Streaming分析
    • janus Streaming插件推流指南
    • 流媒体服务器 
    • WebRTC+libwebsockets+Janus的秒开实践
    • 基于WebRTC的直播CDN
    • 不需要SFU实现WebRTC联播实践  
    • webrtc 开启Simulcast功能
    • Migrating your native/mobile application to Unified Plan/WebRTC 1.0 API
    • WebRTC源码分析rfc4588 RTP重传有效载荷格式
    • WebRTC网关服务器搭建:开源技术 vs 自行研发
    • WebRTC网关服务器搭建:开源技术 vs 自行研发
    • 自研WebRTC网关服务器架构的实践之路
    • WEBRTC三种类型(Mesh、MCU 和 SFU)的多方通信架构  
    • janus的videoroom插件
    • WebRTC+libwebsockets+Janus的秒开实践
    • Janus源码分析(7)——videoroom分析
    • Janus源码分析(5)——echotest分析
    • Janus源码分析(4)——信令交互过程
    • WebRTC+libwebsockets+Janus的秒开实践
    • 前向纠错码(FEC)的RTP荷载格式
    • WebRTC 开发实践:从一对一通话到多人会议
    • Distord如何使用WebRTC处理250万用户同时进行的音频交流
    • 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化
    • 基于WebRTC技术的多人音视频解决方案
    • 谁是最好的WebRTC SFU?
    • WebRTC媒体服务器
    • 使用Janus作为对讲服务器的后台框架和业务流程
  • 链接

    • WebRTC官网
    • xSky 实验室
    • 树莓派技术圈
    • 声网 Agora
    • WebRTC中文网
    • web性能权威指南
    • WebRTC官网
    • webrtc在线源码
    • webrtc在线源码
    • webrtc
    • webrtc示例
    • LiveVideoStack
    • 雷霄骅(leixiaohua1020)的专栏
  • 开源项目


Powered By xblog Copyright 0xsky.com All Rights Reserved.

Copyright WebRTC.ren All Rights Reserved.