python实现rtmp推流

如果只需要推送单独的视频流或者音频流时,最简单的方式是用python启动一个ffmpeg命令行进程,然后往该进程写入视频或者音频原始数据即可。
推送视频流代码

复制代码
command = ['ffmpeg',
                    '-y', '-an',
                    '-f', 'rawvideo',
                    '-vcodec','rawvideo',
                    '-pix_fmt', 'rgb24', #像素格式
                    '-s', "{}x{}".format(width, height),
                    '-r', str(fps),
                    '-i', '-',
                    '-pix_fmt', 'yuv420p', 
                    '-vcodec', "h264",
                    '-f' , 'flv',                  
                    push_url]
pipe = subprocess.Popen(command, shell=False, stdin=subprocess.PIPE)

在需要写入视频帧时调用

复制代码
pipe.stdin.write(image.tostring())

推送音频流代码

复制代码
command = ['ffmpeg',
                    '-y', '-vn',
                    '-f', 's16le',
                    '-acodec','pcm_s16le',
                    '-ac', '1',
                    '-ar', '16000',
                    '-i', '-',
                    '-acodec', 'aac',
                    '-f' , 'flv',                  
                    push_url]
pipe = subprocess.Popen(command, shell=False, stdin=subprocess.PIPE)

在需要写入音频时调用

复制代码
pipe.stdin.write(frame.tostring())

在同时有音视频时,用ffmpeg命令行一直没有调试成功,最后只好用c++代码调用ffmpeg api实现,然后再封装成python函数。这里主要参考了ffmpeg源代码中examples/muxing.c,对于音视频时间戳的同步需要比较注意,在这篇文章中有详细介绍 https://zhuanlan.zhihu.com/p/675007477。 代码已经开源 https://github.com/lipku/python_rtmpstream

相关推荐
Zhansiqi2 小时前
day42部分题目
python
小王不爱笑1322 小时前
IO 模型
开发语言·python
kishu_iOS&AI2 小时前
Conda 简要说明与常用指令
python·安全·conda
小陈工2 小时前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
知我Deja_Vu2 小时前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
njidf2 小时前
用Python制作一个文字冒险游戏
jvm·数据库·python
呆呆小孩2 小时前
Anaconda 被误删抢救手册:从绝望到重生
python·conda
liliangcsdn2 小时前
LLM复杂数值的提取计算场景示例
人工智能·python
人工智能AI酱3 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
WangLanguager3 小时前
逻辑回归(Logistic Regression)的详细介绍及Python代码示例
python·算法·逻辑回归