official.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package http
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "encoding/json"
  6. "fmt"
  7. "go-common/library/ecode"
  8. bm "go-common/library/net/http/blademaster"
  9. "io/ioutil"
  10. "math/rand"
  11. "time"
  12. )
  13. // createOfficalStream 创建正式流
  14. // optional string debug; 1表示线下测试
  15. // required int uid; uid线下测试必传
  16. func createOfficalStream(c *bm.Context) {
  17. defer c.Request.Body.Close()
  18. b, err := ioutil.ReadAll(c.Request.Body)
  19. if err != nil {
  20. c.JSONMap(map[string]interface{}{"message": err}, ecode.RequestErr)
  21. c.Abort()
  22. return
  23. }
  24. if len(b) == 0 {
  25. c.JSONMap(map[string]interface{}{"message": "empty params"}, ecode.RequestErr)
  26. c.Abort()
  27. return
  28. }
  29. type officialParams struct {
  30. RoomID int64 `json:"room_id,omitempty"`
  31. StreamName string `json:"stream_name,omitempty"`
  32. Key string `json:"key,omitempty"`
  33. Debug string `json:"debug,omitempty"`
  34. Uid int `json:"uid,omitempty"`
  35. }
  36. var off officialParams
  37. err = json.Unmarshal(b, &off)
  38. if err != nil {
  39. c.JSONMap(map[string]interface{}{"message": err}, ecode.RequestErr)
  40. c.Abort()
  41. return
  42. }
  43. streamName := off.StreamName
  44. key := off.Key
  45. uid := off.Uid
  46. roomID := off.RoomID
  47. // 线下测试, 1表示线下测试,uid线下测试必传
  48. if uid != 0 {
  49. id := fmt.Sprintf("%d", uid)
  50. key = mockStreamKey(id)
  51. streamName = mockStreamName(id)
  52. }
  53. // 检查参数
  54. if streamName == "" || key == "" || roomID <= 0 {
  55. c.Set("output_data", "some fields are empty")
  56. c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
  57. c.Abort()
  58. return
  59. }
  60. flag := srv.CreateOfficalStream(c, streamName, key, roomID)
  61. c.Set("output_data", fmt.Sprintf("create stream success = %v, room_id = %d", flag, roomID))
  62. c.JSONMap(map[string]interface{}{"data": map[string]bool{"succ": flag}}, nil)
  63. }
  64. // mockStream 模拟生成的流名
  65. func mockStreamName(uid string) string {
  66. num := rand.Int63n(88888888)
  67. return fmt.Sprintf("live_%s_%d", uid, num+1111111)
  68. }
  69. // mockStreamKey 模拟生成的key
  70. func mockStreamKey(uid string) string {
  71. str := fmt.Sprintf("nvijqwopW1%s%d", uid, time.Now().Unix())
  72. h := md5.New()
  73. h.Write([]byte(str))
  74. cipherStr := h.Sum(nil)
  75. md5Str := hex.EncodeToString(cipherStr)
  76. return md5Str
  77. }