关于视频直播思路以及最近这段时间小结一下

基于p2p系统
技术架构
go        技术作为p2p 发送 sdp描述符 维护描述符   
jsmpeg    显示图像
node.js   混淆编码
php       显示
海思 芯片 雄迈显示方案,或者淘宝里面杂牌的摄像机,前提是能够使用rtmp推流

浏览器端:
    simple-peer  p2p基础框架
    flv.js       flv.js 解码
    dplayer修改版  视频显示
    


使用rtmp 推流给服务端,通过ffmpeg 解码为 ts格式 mpeg1+mp2 音频

todo: hls 作为点播视频或者还是基于直播的分发

如果是1分钟短视频,可以直接使用webrtc直接p2p 加速
如果是长视频:
    1、通过MP4类似断点续传方式,也许苹果手机可以 其他的手机直接使用mse方式即可
    2、flv.js 相互传送  苹果 jsmpeg 处理
首先将一个大视频分成若干小块
以二进制读取远端的值。
例:视频文件2GB  分成 1MB一个片段。被切分成 2GB/1MB=2K 份 
    那么值就为2K / 8= 512字节 想取出那个值,直接与这个 512B的数值对比。
    注:类似dht 的。最快最好的读取,平均取出对应的值 
        1、判断那个 


首先:用户开一个或者多个房间,给与用户一个对应的令牌(nginx rtmp带的 )

用户通过令牌推流,服务器进行实时转码,

php端打开网页通过nginx rtmp里面状态查看是否正在直播

1、当直播开始  准备工作
2、推流服务器
4、服务器解码
5、当有第一个请求url直接推流
6、当第二个请求,可以通过webrtc取流
7、当第三个请求,还是通过webrtc取流
8、循环往复

问题点:
为了解决资源一直被乱用问题,
如果用户有人看,就打开摄像头,没人看就关闭摄像头

用户申请摄像头,根据用户区域获取对应的服务器,或者根据ip获取对应的服务器
可以在家里申请固定ip。200M带宽。然后集群分发


服务器集群思路
例:张三开启直播

我家里是100M带宽。是否可以开一个通道。如果用户访问网站视频,这个视频直接去家里取

pion/webrtc 是解决webrtc 与本地服务的一个实现


https://blog.csdn.net/qq_31967569/article/details/82704340
udp打洞转tcp通信
通常,由于udp打洞实现简单,p2p的实现采用udp打洞较多,然而当通路建立起来后使用tcp进行节点间通信可以获取更好的通信效果。
因为udp打洞完成后形成的nat映射是和tcp/udp无关的,所以此时可以转为使用tcp建立连接,达到最终的p2p的tcp通信.由于代码较简单,这里就不给出示例了。


1、如果电脑可以暴露再公网下,就直接使用websocket通信
2、电脑不出在公网下,电脑就使用webrtc与浏览器通信
3、使用ajax读取信息,或者基于web流读取信息

当用户第一次访问网页时,最快获取128kb 的内容。也就是 128/8  16KByte内容,后面可以通过第三方获取

还有一个是获取网站的fragement 描述文件 用mp4box获取的

https://program-think.blogspot.com/2012/06/gfw-i2p.html
补充种子文件
例:
某个文件A
    活动节点
    
部分加载算法,类似软路由的routeros 网速控制



使用类似dht网络算法,




1、点播方法
1920*1080  视频 24帧 1.5Mbit   900k 大约5秒 
    将视频切分成160份(平均1M分配) 类似memcache内存page 默认内存因子 0.7 + 基值 1M 大约开始是 5秒视频
 当第一个用户查看视频的时候,获取1M视频 并且类似dht 头部第一位为 
 用户的 当前 视频 id 当受到某个部分,某个部分就直接为 视频的id值
 
 例如:(使用framgment获取)
  A用户初始化生成的id为:000000  当id为 110110 时,表示中间的id看过了 视频ID:000000 用户ID为随机:123456
  B用户初始化生成的id为:000000  当id为 110111 时,表示中间的id看过了 视频ID:000000 用户ID为随机:123456
  C如果有一个用户为id为:100100 的时候,想获取最后两位的1个数据,就 跟 110110 做操作
  操作为 110100  变为  111100  服务器收到后, 与A B 做比较 最后与A结果为 10 B结果比较为 11
  所以有限选择B,如果B达到最大用户权限,就用A。通过  C|A C|B 做的结果值
  当然,C可能没有A | B的路由表
    又由于 尽量不让C与服务器通信。所以
    C使用DHT的方式与种子服务器交互,种子服务器也相当于一个一个特殊ID,但是ID为 111111,会给C部分路由表
    
    

2、直播方法
1920*1080  视频 24帧 1.5Mbit   900k 大约5秒 
    A视频的ID值为 000000  用户id为随机数 123456 每获取一个视频信息,就让其他用户获取,且只是两个用户。
    例:
        角色:寄信人 邮局   张三 李四 王五 
        作用:消息发送到所有人上面
        
        寄信人发送消息
            邮局收到消息
            
         张三问问邮局拿数据,拿到数据
         李四找邮局要数据,提示让他找张三拿
         李四找张三,ok,两个人之间发送数据,
          张三再次到邮局拿数据
          之后再发送给李四
          
         如果李四找张三拿数据拿不到。
         李四再次找服务器,说张三那边拿不到。
         那么服务器发最新消息给李四,
         张三想拿消息,提示你取找李四
        
        消息循环
        
        
3、短视频方法
    由于短视频内容较短,直接p2p全部获取文件,播放
      
         
       
            
在鼻子中间有眼睛。如果有人指着就有感觉。
            

todo:
    如果使用mse 中间的点播,是否可以做到时间值的映射(不做也行)    
    

小姐:

1、理光、佳能打印机snmp html之类的数据采集  什么mibs表啥的
2、远程开关智能充电桩
3、开源机器人 robot 打印出来了,就是力道有问题
4、tcp/udp/websocket 中间通讯
5、串口程序调整 term.js + c#  + 本地tcp
6、电脑升级了一下 T530 升级 为 W541, cpu 3740  升级为 4810 内存 16g升级 为24g 主要是显卡 以前是集显,现在是k1100m。 分数没多大提升  t530 鲁大师测试为10万左右  cpu:9万+其他1万   w541   cpu:7万+其他5万左右。做图方便了一些。我把以前t530换了cpu 加了 扇热铜片+导热管
7、接了一个mes系统,二开,挺累的。又不赚钱。
8、最近坚持6点左右起床,感觉挺好。主要是晚上9点睡。加油!

        
        
        
         
        
   

    



























未经允许不得转载:智慧,启迪人生 » 关于视频直播思路以及最近这段时间小结一下

打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏