当前位置: 首页 > news >正文

公网tcp转流

之前做过几次公网推流的尝试, 今天试了UDP推到公网, 再用TCP从公网拉下来, 发现不行, 就直接改用TCP转TCP了.
中间中转使用的python脚本, 感谢GPT提供技术支持:

import socket
import threadingdef tcp_receiver(port, forward_queue):"""接收TCP数据并将其放入队列"""receiver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)receiver_socket.bind(('', port))receiver_socket.listen(1)print(f"TCP receiver ready on port {port}")while True:client_socket, addr = receiver_socket.accept()print(f"Connected by {addr} for receiving data on port {port}")try:while True:data = client_socket.recv(1024)if not data:breakforward_queue.put(data)finally:client_socket.close()print(f"Receiver connection closed by {addr}")def tcp_forwarder(port, forward_queue):"""从队列中获取数据并转发到另一个TCP连接"""forwarder_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)forwarder_socket.bind(('', port))forwarder_socket.listen(1)print(f"TCP forwarder ready on port {port}")while True:client_socket, addr = forwarder_socket.accept()print(f"Connected by {addr} for forwarding data on port {port}")try:while True:data = forward_queue.get()  # This blocks until data is availabletry:client_socket.sendall(data)except socket.error:print("Failed to send data, discarding packet")break  # End connection if sending failsfinally:client_socket.close()print(f"Forwarder connection closed by {addr}")if __name__ == '__main__':from queue import Queuedata_queue = Queue()receiver_thread = threading.Thread(target=tcp_receiver, args=(9998, data_queue))forwarder_thread = threading.Thread(target=tcp_forwarder, args=(9997, data_queue))receiver_thread.start()forwarder_thread.start()

就是从9998端口转发数据到9997端口, 下一步就用nginx做这个好了. 不用脚本了.

rtsp的部分, 源码在下面:

https://github.com/MontaukLaw/1126_rtsp

基于官方的vi_venc_rtsp sample code, 将rtsp的部分改成直接往公网推.

播放流依然是老办法:

ffplay -i tcp://wan_ip:9997

因为我不需要缓存, 所以之前用ZLMedia转的方法, 一直会导致延迟慢慢变大, 可能是缓存的关系.
目前, 1126使用的WiFi连接的Internet, 延迟大约在1秒左右

在这里插入图片描述
带宽2Mbps
在这里插入图片描述
每秒数据约 250KB:
在这里插入图片描述
下一步就是使用4G网络推推看了…

http://www.lryc.cn/news/341781.html

相关文章:

  • 【Linux 基础 IO】文件系统
  • Chrome浏览器安装React工具
  • React常用组件分享
  • JSON原生AJAX
  • Go图片列表
  • 1.4 初探JdbcTemplate操作
  • React 第二十一章 Portals
  • ADS基础教程9-理想模型和厂商模型实现及对比
  • 从零开始学AI绘画,万字Stable Diffusion终极教程(二)
  • electron 通信总结
  • [基础] Unity Shader:顶点着色器(vert)函数
  • 什么是数据库的三大范式?
  • ASP.NET网上图书预约系统的设计
  • 双色球案例【C#】
  • 【LeetCode刷题】739. 每日温度(单调栈)
  • Docker-Consul容器服务更新与发现
  • 练习题(2024/5/6)
  • 利用matplotlib和networkx绘制有向图[显示边的权重]
  • Springboot+Vue项目-基于Java+MySQL的教学资料管理系统(附源码+演示视频+LW)
  • 从NoSQL到NewSQL——10年代大数据浪潮下的技术革新
  • 巴菲特股东大会5万字完整版来了!
  • LY/T 1860-2022 非甲醛类热塑性树脂胶合板检测
  • 信息管理与信息系统就业方向及前景分析
  • TCP的三次握手过程
  • Microsoft 推出 Phi-3 系列紧凑型语言模型
  • Retrofit库中,Call​;Retrofit使用举例;@GET,@PUT区别;
  • # 怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法
  • 强化学习玩flappy_bird
  • JavaWeb请求响应概述
  • 【IDEA】IDEA常用快捷键