MaixCAM MaixPy 视频流 RTMP 推流
2024-05-20
更新历史
| 日期 | 版本 | 作者 | 更新内容 |
|---|---|---|---|
| 2024-05-20 | 1.0.0 | lxowalle | 初版文档 |
简介
本文档提供通过RTMP推送H264视频流的方法
使用方法
from maix import camera, time, rtmp, image
cam = camera.Camera(640, 480, image.Format.FMT_YVU420SP)
# rtmp://192.168.0.30:1935/live/stream
host = '192.168.0.30'
port = 1935
app = 'live'
stream = 'stream'
bitrate = 1000_000
r = rtmp.Rtmp(host, port, app, stream, bitrate)
r.bind_camera(cam)
r.start()
while True:
time.sleep(1)
步骤:
导入camera, time, rtmp和image模块
from maix import camera, time, rtmp, image初始化摄像头
cam = camera.Camera(640, 480, image.Format.FMT_YVU420SP) # 初始化摄像头,输出分辨率640x480 NV21格式- 注意RTMP模块目前只支持NV21格式, 因此摄像头需要配置为NV21格式输出
初始化并启动Rtmp对象
r = rtmp.Rtmp(host, port, app, stream, bitrate) r.bind_camera(cam) r.start()r = rtmp.Rtmp(host, port, app, stream, bitrate)用来创建一个Rtmp对象,其中host指rtmp服务器的ip地址或者域名,app指rtmp服务器开放的应用名,stream指rtmp流的名称,也可以作为本次推流的密钥r.bind_camera(cam)用来绑定一个Camera对象, 绑定后原Camera对象将不能再使用r.start()用来启动rtmp推流
完成
支持推流音频
MaixPy支持同时推送音视频流, 通过绑定一个Recorder对象后可以在推送视频流的同时附带音频数据
注:MaixPy v4.7.8之后的版本支持该方法(不包括v4.7.8)
参考代码如下:
from maix import camera, time, app, rtmp, image, audio
cam = camera.Camera(640, 480, image.Format.FMT_YVU420SP)
audio_recorder = audio.Recorder()
host="192.168.0.63"
port=1935
app_name="live"
stream_name="stream"
client = rtmp.Rtmp(host, port, app_name, stream_name)
client.bind_camera(cam)
client.bind_audio_recorder(audio_recorder)
client.start()
print(f"rtmp://{host}:{port}/{app_name}/{stream_name}")
while not app.need_exit():
time.sleep(1)
上文中通过audio.Recorder()创建一个audio_recorder对象,并使用Rtmp的bind_audio_recorder()方法绑定该对象, 推流的同时把音频数据也推送出去了.
向Bilibili推流测试
启动bilibili直播
点击直播

点击开播设置

- 通过
我的直播间链接找到直播地址

- 往下翻,选择一个
分类,再点击开始直播

- 执行步骤4后,可以看到

- 直播服务器的地址为:
rtmp://live-push.bilivideo.com/live-bvc - 串流密钥为:
?streamname=live_xxxx&key=1fbfxxxxxxxxxxxxxffe0&schedule=rtmp&pflag=1
组合起来的rtmp推流地址就是:rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_xxxx&key=1fbfxxxxxxxxxxxxxffe0&schedule=rtmp&pflag=1
运行RTMP客户端
from maix import camera, time, rtmp, image
cam = camera.Camera(640, 480, image.Format.FMT_YVU420SP)
# rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_xxxx&key=1fbfxxxxxxxxxxxxxffe0&schedule=rtmp&pflag=1
host = 'live-push.bilivideo.com'
port = 1935
app = 'live-bvc'
stream = '?streamname=live_xxxx&key=1fbfxxxxxxxxxxxxxffe0&schedule=rtmp&pflag=1'
bitrate = 1000_000
r = rtmp.Rtmp(host, port, app, stream, bitrate)
r.bind_camera(cam)
r.start()
while True:
time.sleep(1)
上面拿到bilibili的推流地址为rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_xxxx&key=1fbfxxxxxxxxxxxxxffe0&schedule=rtmp&pflag=1
可以拆出
- 服务器地址为
live-push.bilivideo.com - 端口号为
1935,即没有端口号则默认为1935 - 应用名为
live-bvc - 流名称为
?streamname=live_xxxx&key=1fbfxxxxxxxxxxxxxffe0&schedule=rtmp&pflag=1
运行代码,就能在直播间看到maixcam的画面了,如果发现直播没有显示,可以尝试先关闭直播间,再重新打开直播间,再运行代码。
动手试试吧~