golang 实现视频服务器

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"path/filepath"
	"time"
)

func DownloadPdf(tsid int) ([]byte, error) {
	// 表单数据
	//data := url.Values{}
	//data.Set("name", "rnben")
	//data.Set("__RequestVerificationToken", pdfattr.Token)
	//data.Set("id", pdfattr.ID)
	//data.Set(pdfattr.Name, "")

	// 请求头数据
	//URI := "https://bilibili.xiang-kuyun.com/20210215/11581_edc20a8a/1000k/hls/d488571a07f000013.ts"
	URI := "https://bilibili.xiang-kuyun.com/20210215/11581_edc20a8a/1000k/hls/d488571a07f" + fmt.Sprintf("%06d", tsid) + ".ts"

	r, err := http.NewRequest("GET", URI, nil)
	r.Header.Set("authority", "bilibili.xiang-kuyun.com")
	r.Header.Add("Accept-Encoding", "gzip, deflate, br")
	r.Header.Add("Accept-Language", "zh-CN,zh;q=0.9")
	r.Header.Add("origin", "http://www.haiantv.com")
	r.Header.Add("sec-ch-ua", `"Chromium";v="88", "Google Chrome";v="88", ";Not\\A\"Brand";v="99"`)
	r.Header.Add("sec-ch-ua-mobile", "?1")
	r.Header.Add("sec-fetch-dest", "empty")
	r.Header.Add("sec-fetch-mode", "cors")
	r.Header.Add("sec-fetch-site", "cross-site")
	r.Header.Add("user-agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Mobile Safari/537.36")

	// 打印http请求
	//if Debug {
	/*
		fmt.Println("------------------------start--------------------------------")
		//fmt.Printf("%v", r)
		requestDump, err := httputil.DumpRequest(r, true)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(string(requestDump))
		fmt.Println("-------------------------end---------------------------------")
	*/
	//}

	// 执行http请求
	client := &http.Client{}
	resp, err := client.Do(r)
	if err != nil {
		fmt.Println(err.Error())
		return nil, err
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	//fmt.Println(string(body))
	return body, err
}

func DownloadTangrenjie3(tsid int) ([]byte, error) {
	URI := "https://qingxi.xi-zuida.com/20210214/1241_b3b11edb/1000k/hls/7cd9f0647e8" + fmt.Sprintf("%06d", tsid) + ".ts"

	r, err := http.NewRequest("GET", URI, nil)
	r.Header.Set("authority", "qingxi.xi-zuida.com")
	r.Header.Add("Accept-Encoding", "gzip, deflate, br")
	r.Header.Add("Accept-Language", "zh-CN,zh;q=0.9")
	r.Header.Add("origin", "http://www.haiantv.com")
	r.Header.Add("sec-ch-ua", `"Chromium";v="88", "Google Chrome";v="88", ";Not\\A\"Brand";v="99"`)
	r.Header.Add("sec-ch-ua-mobile", "?1")
	r.Header.Add("sec-fetch-dest", "empty")
	r.Header.Add("sec-fetch-mode", "cors")
	r.Header.Add("sec-fetch-site", "cross-site")
	r.Header.Add("user-agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Mobile Safari/537.36")

	// 打印http请求
	//if Debug {
	/*
		fmt.Println("------------------------start--------------------------------")
		//fmt.Printf("%v", r)
		requestDump, err := httputil.DumpRequest(r, true)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(string(requestDump))
		fmt.Println("-------------------------end---------------------------------")
	*/
	//}

	// 执行http请求
	client := &http.Client{}
	resp, err := client.Do(r)
	if err != nil {
		fmt.Println(err.Error())
		return nil, err
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	//fmt.Println(string(body))
	return body, err
}

func ServeHTTPLihuanying(w http.ResponseWriter, r *http.Request) {
	video, err := os.Open("./lihuanying.mp4")
	if err != nil {
		log.Fatal(err)
	}
	defer video.Close()

	http.ServeContent(w, r, "lihuanying.mp4", time.Now(), video)
}

func ServeHTTPTangtan3(w http.ResponseWriter, r *http.Request) {
	video, err := os.Open("./tangtan3.mp4")
	if err != nil {
		log.Fatal(err)
	}
	defer video.Close()

	http.ServeContent(w, r, "tangtan3.mp4", time.Now(), video)
}

func ServeHTTPTs(w http.ResponseWriter, r *http.Request) {
	video, err := os.Open("./ts.mp4")
	if err != nil {
		log.Fatal(err)
	}
	defer video.Close()

	http.ServeContent(w, r, "ts.mp4", time.Now(), video)
}

func main() {
	// 视频播放服务器
	http.HandleFunc("/lihuanying", ServeHTTPLihuanying)
	http.HandleFunc("/tangtan3", ServeHTTPTangtan3)
	http.HandleFunc("/ts", ServeHTTPTs)
	http.ListenAndServe(":8080", nil)
	return

	// 下载李焕英视频
	/*
		for i := 0; i <= 1798; i++ {
			//for i := 0; i <= 2; i++ {
			d0, err := DownloadPdf(i)
			if err != nil {
				panic(err)
			}
			filename := fmt.Sprintf("%06d", i) + ".ts"
			ioutil.WriteFile(filepath.Join("ts", filename), d0, 0666)
			fmt.Printf("下载片段:%d\n", i)
		}
	*/

	// 下载唐人街3视频
	for i := 122; i <= 1986; i++ {
		//for i := 0; i <= 2; i++ {
		d0, err := DownloadTangrenjie3(i)
		if err != nil {
			panic(err)
		}
		filename := fmt.Sprintf("%06d", i) + ".ts"
		ioutil.WriteFile(filepath.Join("ts", filename), d0, 0666)
		fmt.Printf("下载片段:%d\n", i)
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐墨123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值