-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Hello i am trying to build a project to learn by building a backend clone of Tiktok i am trying to learn
What's Popping? π―
Trying to build a sick livestreaming feature but the Stream Go SDK methods are playing hard to get:
lc.streamClient.Callundefinedlc.streamClient.Video()undefined- Type mismatches with user IDs (string vs int)
Expected Behavior πͺ
Should be able to create livestreams like a boss using:
how i initialize the stream Video Livestream API
package config
import (
"os"
"github.com/GetStream/getstream-go"
)
func InitStreamVideo() (*getstream.Stream, error) {
apiKey := os.Getenv("STREAM_API_KEY")
apiSecret := os.Getenv("STREAM_API_SECRET")
client, err := getstream.NewClient(apiKey, apiSecret)
if err != nil {
return nil, err
}
return client, nil
}The controller than handle these
package controllers
import (
"Tiktok/internal/database"
"Tiktok/internal/models"
"Tiktok/internal/utils"
"context"
"strconv"
"github.com/GetStream/getstream-go"
"github.com/go-playground/validator"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
)
type LiveStreamController struct {
db database.Service
validate *validator.Validate
streamClient *getstream.Client
}
type StartStreamRequest struct {
Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"`
}
func (lc *LiveStreamController) StartStream(c *fiber.Ctx) error {
ctx := context.Background()
claims := c.Locals("user").(*utils.Claims)
var req StartStreamRequest
if err := c.BodyParser(&req); err != nil {
return utils.SendErrorResponse(c, fiber.StatusBadRequest, "Invalid request", err.Error())
}
userID := strconv.Itoa(claims.UserID)
callID := uuid.New().String()
// Create livestream call
call := lc.streamClient.Video().Call("livestream", callID)
response, err := call.GetOrCreate(ctx, &getstream.GetOrCreateCallRequest{
Data: &getstream.CallRequest{
CreatedByID: getstream.PtrTo(userID),
Members: []getstream.MemberRequest{
{UserID: userID, Role: getstream.PtrTo("host")},
},
Custom: map[string]interface{}{
"title": req.Title,
"description": req.Description,
},
},
})
if err != nil {
return utils.SendErrorResponse(c, fiber.StatusInternalServerError, "Failed to create stream", err.Error())
}
// Save to database
stream := &models.LiveStream{
UserID: claims.UserID,
Title: req.Title,
Description: req.Description,
CallID: callID,
Status: "backstage",
StreamKey: response.StreamKey,
RtmpUrl: response.RtmpUrl,
}
if err := lc.db.CreateLiveStream(ctx, stream); err != nil {
return utils.SendErrorResponse(c, fiber.StatusInternalServerError, "Failed to save stream", err.Error())
}
return c.JSON(fiber.Map{
"status": "success",
"data": stream,
})
}
Current Behavior πͺ
Getting compiler errors faster than a Twitch chat during a fail moment
SDK Version
- GetStream Go SDK: latest
- Go version: latest
- Framework: Fiber
The Dream π
Just trying to make the next big streaming platform here! Help a dev out!
Metadata
Metadata
Assignees
Labels
No labels