Skip to content

🎭 Stream API Methods Playing Hide and Seek in Go SDK #25

@GSGSDgggdzez

Description

@GSGSDgggdzez

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.Call undefined
  • lc.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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions