NockyGo

爱代码,爱生活

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
import(
"fmt"
"time"
)
func producer(nums ...int) <-chan int{// 括号里输入参数,括号外返回的参数类型
out :=make(chan int)
go func() {
defer close(out)
for _,n :=range nums{
out<-n
}
}()
return out
}
func cal(inch <-chan int) <-chan int{//括号里从chan读取数据,括号外返回的参数类型
out :=make(chan int)
go func() {
defer close(out)
for n :=range inch{
out<-n*n
}
}()
return out
}
func main(){
t := time.Now()
in :=producer(1000000)
ch :=cal(in)
//consumer
for ret :=range ch{
fmt.Printf("%3d", ret)
}
fmt.Println()
elapsed := time.Since(t)
fmt.Println("app elapsed:", elapsed)
}
这个是首尾各一管道,读取数据用协程读取管道,写入数据用协程写入管道

1.无缓冲的 就是一个送信人去你家门口送信 ,你不在家 他不走,你一定要接下信,他才会走。
2.无缓冲保证信能到你手上
3.有缓冲的 就是一个送信人去你家仍到你家的信箱 转身就走 ,除非你的信箱满了 他必须等信箱空下来。
4.有缓冲的 保证 信能进你家的邮箱
5.如果这里没有缓冲的话,就会出现阻塞,因为无缓冲,他需要等你接到信,main 方法执行完了,你还没接,阻塞了,针对协程,要加个有缓冲,这样直接到邮箱里,到时候自己去取,这里的缓冲池,在retch中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main
import(
"fmt"
"time"
)
func workerpool(n int,jobch <-chan int,retch chan<- string){// 没有返回的参数,jobch 读取chan中的数据,retch 写数据到chan中
for i :=0;i<n;i++{
go worker(i,jobch,retch);
}
}
func worker(id int,jobch <-chan int,retch chan<- string){
for job :=range jobch{
ret := fmt.Sprintf("worker %d process job %d",id,job)
retch <-ret
}
}
func genjob(n int) <-chan int{
jobch :=make(chan int,200)
go func(){
for i :=0;i<n;i++{
jobch <-i
}
close(jobch)
}()
return jobch
}
func main(){
jobch :=genjob(10)
retch :=make(chan string,200)
workerpool(5,jobch,retch)
time.Sleep(time.Second)
close(retch)
for ret :=range retch{
fmt.Println(ret)
}
}

linux 搭建直播服务器

同时也在学习livego中

  1. $ apt-get install ffmpeg

$ git clone https://github.com/gwuhaolin/livego.git

2.记得需要加
export GOPROXY=https://goproxy.io 或者国内 https://goproxy.cn
export GO111MODULE=on

3.同时在阿里云安全组规则把livego.yaml 里面的端口全部开启

4.使用tmux go run main.go

添加ngix 配置oss 反向代理模块 /etc/nginx/conf.d/oss.conf


server {
    server_name  localhost; # oss域名,替换成你自己的域名
    server_name_in_redirect off; # 多域名防干扰,详细说明可自行查阅

    location / {
      # 反向代理oss地址,需替换成你的oss内网或外网地址
      proxy_pass http://bb.oss-cn-shanghai-internal.aliyuncs.com/;
      # 设置反向代理时请求header, 也是本方案核心内容
      # $ossDate, $ossAuth 变量名需和nginx.conf文件内变量名一致
      #proxy_set_header Date $ossDate;
      #proxy_set_header Authorization $ossAuth;
    }

}

客户端我使用的是dplayer 因为兼容微信 safari 浏览器

具体的代码
参考 https://github.com/MoePlayer/DPlayer
仅需更改其中的url即可
比如可使用刚才 http://localhost/a.mp4
如果出现cors跨域问题,需要在oss端更改权限设置 将请求get post添加上,header上添加* 即可访问.

直播推流

1.打开 http://localhost:8090/control/get?room=movie movie 可以变成任意的,但是下面要保持一致
2.在dplayer 的url中设置 为:http://localhost:7002/live/movie.m3u8
3.
(1) 摄像头推流
ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -vcodec libx264 -acodec libfaac -f flv rtmp://localhost:1935/live/rfBd56ti2SMtYvSgD5xAV0YU99zampta7Z7S575KLkIZ9PYk
(2) 视频推流
ffmpeg -re -i 123.mp4 -c copy -f flv rtmp://localhost:1935/live/rfBd56ti2SMtYvSgD5xAV0YU99zampta7Z7S575KLkIZ9PYk
(3) 电脑端的推流可以使用obs
(4) 手机端推流使用腾讯的视频云工具包
摄像头推流-》rtmp://localhost:1935/live/rfBd56ti2SMtYvSgD5xAV0YU99zampta7Z7S575KLkIZ9PYk

直播拉流

拉流的地址就是: http://localhost:7002/live/movie.m3u8

上传视频文件到oss

此处用https://github.com/dcq2016/plupload 上传到oss 更改其中的
src/components/Plupload.vue中
accessid
accesskey
host
换成自己阿里云对应的值

0%