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

相关推荐
a程序小傲6 分钟前
京东Java面试被问:ZGC的染色指针如何实现?内存屏障如何处理?
java·后端·python·面试
大连好光景30 分钟前
批量匿名数据重识别(debug记录)
开发语言·python
暴风鱼划水35 分钟前
算法题(Python)哈希表 | 2.两个数组的交集
python·算法·哈希表
清水白石00837 分钟前
《深入 Celery:用 Python 构建高可用任务队列的实战指南》
开发语言·python
BoBoZz191 小时前
Hello 隐式建模
python·vtk·图形渲染·图形处理
副露のmagic1 小时前
更弱智的算法学习day 10
python·学习·算法
javpy1 小时前
AI生成 Python小游戏 怪物防御战???
人工智能·python·pygame
爱笑的眼睛111 小时前
超越SIFT与ORB:深入OpenCV特征检测API的设计哲学与高阶实践
java·人工智能·python·ai
中年程序员一枚2 小时前
python开发接口uvicorn方法启动FastAPI,postman调用接口
python·postman·fastapi