Skip to main content

description

功能:将音视频数据转换成rtp包

usage examples

安装av库

pip uninstall av && pip install av --no-binary av

提供了四个转换函数,支持传入原始文件和字节数据两种方式,具体使用方式请参考下面的示例:

from pydub import AudioSegment
import cv2
from time import sleep, time

if __name__ == '__main__':
    ip_address = "10.253.101.36"
    # ip_address = "127.0.0.1"
    port = 7777
    image_file = "/Users/a58/Code/python/rtp/images/frame_0.png"
    image_files = ["/Users/a58/Code/python/rtp/images/frame_%d.png" % i for i in range(5)]
    audio_file = "/Users/a58/Code/python/rtp/audios/bgroup.wav"
    audio_16k_file = "/Users/a58/Code/python/rtp/audios/bgroup16k.wav"

    frame_size = (1080, 1920) # (width, height)

    rtpSender = RTPSender(ip_address, port, frame_size, hard_encode=False, open_log=True, days=7)
    rtpSender.stop()
    
    rtpSender = RTPSender(ip_address, port, frame_size, hard_encode=False, open_log=True, days=7)

    audio = AudioSegment.from_file(audio_16k_file, format="wav")
    audio_data = audio.raw_data
    i = 0
    cnt = 0
    t1 = time()

    init_cnt = 2

    imgs = [cv2.imread(image_file) for image_file in image_files]

    frame_cnt = 0

    while True:
        for img in imgs:
            if i >= len(audio_data) - 640:
                i = 0
            for j in range(25):
                # print("time: ", time())
                rtpSender.send_video_rtp_from_img(img)
                # rtpSender.send_video_rtp_from_img(img)
                # if packets_len > 0:
                #     print("packets_len: ", packets_len, ", frame_cnt: ", frame_cnt)
                frame_cnt += 1
                rtpSender.send_audio_rtp_from_bytes(audio_data[i:i+640], True)
                i += 640
                rtpSender.send_audio_rtp_from_bytes(audio_data[i:i+640], True)
                cnt += 1
                i += 640
                t2 = time()
                t = t1 + cnt*0.04 - t2
                # print("t: ", t)
                if t > 0:
                    # print("sleep: ", t)
                    sleep(t)
            # img = cv2.imread(image_file)
            # rtpSender.send_audio_rtp_from_file(audio_file)
            # t1 = time()
        if init_cnt < 20:
            rtpSender.stop()
            rtpSender = RTPSender(ip_address, port, frame_size, hard_encode=False, open_log=True, days=7)
            init_cnt += 1
            print("reinit rtpSender: ", init_cnt)

    # 只支持采样率48000HZ,单通道 20ms
    # rtpSender.send_audio_rtp_from_file(audio_file)
    # img = cv2.imread(image_file)
    # rtpSender.send_video_rtp_from_img(img)

    # audio = AudioSegment.from_file(audio_file, format="wav")
    # audio_data = audio.raw_data
    # # 只支持采样率48000HZ,单通道 20ms
    # rtpSender.send_audio_rtp_from_bytes(audio_data)

Releases

Release Version Release Date Updates
v3.8.8 2024-09-14 在v3.8.6的基础上,增加平均耗时日志
v3.8.6 2024-09-14 增加编码和发送耗时日志
v3.8.4 2024-09-13 在v3.8.3的基础上,增加时间日志
v3.8.3 2024-09-11 在v3.8.0的基础上,暴露gop参数
v3.8.2 2024-09-06 删除测试代码
v3.8.1 2024-09-06 引入多进程
v3.8.0 2024-09-04 设置码率为600k
v3.7.9 2024-08-29 添加控制台日志开关
v3.7.8 2024-08-29 使用loguru记录日志
v3.7.7 2024-08-29 Bug fixes
v3.7.5 2024-08-29 添加滚动日志,保存日志到文件

Metadata

Release files for RTPSender 3.9.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for RTPSender 3.9.4.2
File Size Uploaded
rtpsender-3.9.4.2.tar.gz 10.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for RTPSender 3.9.4.2
File Interpreter ABI Platform
RTPSender-3.9.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 22.3 kB

Release files / rtpsender-3.9.4.2.tar.gz

Download URL rtpsender-3.9.4.2.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
4a8589fb7ddbb4195a9e58084b87e8d68a95dad5e5d800465ab47d975dc3e9c4
BLAKE2b-256 checksum
How to use checksums
641515b6c0ddf50e78cf434efb4a1b64e57a481b0e47c39819b65887be722d94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.19

Release files / RTPSender-3.9.4.2-py3-none-any.whl

Download URL RTPSender-3.9.4.2-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
88e6997f48206743e213008429e5ff23e2d11066c59c2a053cba1e2f119ec262
BLAKE2b-256 checksum
How to use checksums
96847b4a07344d57855b2a5cc32833c2d0cb85a9b399c16a692fd7d692b9b24e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.19

Release history Release notifications | RSS feed

This release

3.9.4.2 This release

2 release files

3.9.4

2 release files

3.9.3

2 release files

3.9.2

2 release files

3.9.1

2 release files

3.9.0

2 release files

3.8.9

2 release files

3.8.8

2 release files

3.8.7

2 release files

3.8.6

2 release files

3.8.5

2 release files

3.8.4

2 release files

3.8.3

2 release files

3.8.2

2 release files

3.8.1

2 release files

3.8.0

2 release files

3.7.9

2 release files

3.7.8

2 release files

3.7.7

2 release files

3.7.6

2 release files

3.7.5

2 release files

3.7.4

2 release files

3.7.3

2 release files

3.7.2

2 release files

3.7.1

2 release files

3.7.0

2 release files

3.6.8

2 release files

3.6.7

2 release files

3.6.6

2 release files

3.6.5

2 release files

3.6.4

2 release files

3.6.3

2 release files

3.6.2

2 release files

3.6.1

2 release files

3.6

2 release files

3.5

2 release files

3.4

2 release files

3.3

2 release files

3.2

2 release files

3.1

2 release files

3.0

2 release files

2.9

2 release files

2.8

2 release files

2.7

2 release files

2.6

2 release files

2.5

2 release files

2.4

2 release files

2.3

2 release files

2.2

2 release files

2.1

2 release files

2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page