이기현
211
2018-10-01 16:02:05 작성 2018-10-01 16:05:21 수정됨
2
453

c#으로 youtube 실시간 방송 app을 만들어보려고합니다.


1 : https://developers.google.com/youtube/v3/live/getting-started

2 : https://developers.google.com/youtube/v3/live/life-of-a-broadcast

위 두개의 URL을 참고하여 작업을 진행중입니다.

현재까지 제가 파악한 내용은 다음과 같습니다.

1. Broadcast 객체를 만들어라

2. LiveStream 객체를 만들어라

3. 이 둘을 바인딩해라 

4. 바인딩하면 실시간 이벤트가 생성된다. 이때 Broadcast, LiveStream 의 Status는 ready가 된다.

5. Data를 LiveStream으로 전송해라 이때 LiveStream의 Status는 activity가 된다.

6. LiveStream의 Status가 activity가 된 것을 확인하고 Broadcast의 상태를 Live or Test로 바꿔라


1, 2, 3, 4 까지 왔습니다.

제가 이용하고 있는 구글 계정에 실시간 이벤트가 생성되는 것 을 확인했고

Broadcast, LiveStream의 Status가 ready가 되는 것도 확인했습니다.

6 도 문제가 아닙니다. 6은 이미 정의해놨습니다.

5 가 문제입니다.

일단 LiveStream으로 data를 전송하면 LiveStream의 Status가 activity가 되는 것은 맞습니다.

유튜브 API로 이미 만들어진 인코딩 소프트웨어로 테스트를 해봤습니다.

문제는 어떻게 보내냐는 겁니다.


제일 위에있는 2번 URL 문서에 있는 5 관련 설명입니다.



"비디오 스트림에서 비디오 전송을 시작하십시오" 이게 5 관련 문서의 전부입니다.


제일 위에있는 1번 URL 문서에 상단에 존재하는 동영상에도 5 는 미리 만들어놓은 프로그램으로

설명 하지않고 지나갑니다.

(22:57 부터 자막 : And I really want to go one level further.

                             And I created a small streaming app that I will try.)


3일동안 번역기 돌려가며 인터넷을 뒤졌지만 5 에 관련한 소스는 없더군요 문서도 마찬가집니다.


소스입니다.

        private void LiveStreamBtn_Click(object sender, RoutedEventArgs e)
        {
            var broadcast = new LiveBroadcast
            {
                Kind = "youtube#liveBroadcast",
                Snippet = new LiveBroadcastSnippet
                {
                    Title = "Parsentech_StreamService",
                    ScheduledStartTime = DateTime.Now
                },
                Status = new LiveBroadcastStatus
                {
                    PrivacyStatus = "private",
                },
                ContentDetails = new LiveBroadcastContentDetails
                {
                    MonitorStream = new MonitorStreamInfo
                    {
                        EnableMonitorStream = true
                    }
                }
            };

            var liveBroadcastInsert = youTubeService.LiveBroadcasts.Insert(broadcast, "snippet,status,contentDetails");
            var returnedBroadcast = liveBroadcastInsert.Execute();

            Console.WriteLine("\n================== Returned Broadcast ==================\n");
            Console.WriteLine(" - Id: " + returnedBroadcast.Id);
            Console.WriteLine(" - Title: " + returnedBroadcast.Snippet.Title);
            Console.WriteLine(" - Description: " + returnedBroadcast.Snippet.Description);
            Console.WriteLine(" - Published At: " + returnedBroadcast.Snippet.PublishedAt);
            Console.WriteLine(" - Scheduled Start Time: " + returnedBroadcast.Snippet.ScheduledStartTime);
            Console.WriteLine(" - Scheduled End Time: " + returnedBroadcast.Snippet.ScheduledEndTime);

            var stream = new LiveStream
            {
                Kind = "youtube#liveStream",
                Snippet = new LiveStreamSnippet
                {
                    Title = "StreamService"
                },
                Status = new LiveStreamStatus
                {
                    StreamStatus = "active"
                },
                Cdn = new CdnSettings
                {
                    Format = "720p",
                    IngestionType = "rtmp"
                }
            };

            var liveStreamInsert = youTubeService.LiveStreams.Insert(stream, "snippet,status,cdn");
            var returnedStream = liveStreamInsert.Execute();

            Console.WriteLine("\n================== Returned Stream ==================\n");
            Console.WriteLine(" - Id: " + returnedStream.Id);
            Console.WriteLine(" - Title: " + returnedStream.Snippet.Title);
            Console.WriteLine(" - Description: " + returnedStream.Snippet.Description);
            Console.WriteLine(" - Published At: " + returnedStream.Snippet.PublishedAt);
            Console.WriteLine(" - URL: " + returnedStream.Cdn.IngestionInfo.IngestionAddress);
            Console.WriteLine(" - Name: " + returnedStream.Cdn.IngestionInfo.StreamName);

            var liveBroadcastBind = youTubeService.LiveBroadcasts.Bind(returnedBroadcast.Id, "id,status,contentDetails");
            liveBroadcastBind.StreamId = returnedStream.Id;
            returnedBroadcast = liveBroadcastBind.Execute();

            Console.WriteLine("\n================== Returned Bound Broadcast ==================\n");
            Console.WriteLine(" - Broadcast Id: " + returnedBroadcast.Id);
            Console.WriteLine(" - Bound Stream Id: " + returnedBroadcast.ContentDetails.BoundStreamId);

            var liveStreamRequest = youTubeService.LiveStreams.List("id,snippet,status");

            liveStreamRequest.Id = returnedStream.Id;

            Console.WriteLine("\n================== Find Bound Broadcast, Stream ==================\n");
            Console.WriteLine("BroadCast status :: " + returnedBroadcast.Status.LifeCycleStatus);
            Console.WriteLine("Stream status :: " + returnedStream.Status.StreamStatus);

            Console.WriteLine("@@::" + returnedBroadcast.ContentDetails.MonitorStream.EmbedHtml+ "::@@");
            Console.WriteLine("@@::" + returnedBroadcast.ContentDetails.MonitorStream.EnableMonitorStream+ "::@@");

            //여기서 Stream으로 data를 전송해 returnedStream.Status.StreamStatus를 activity로 만들어야한다.

            var broadCastTrans 
                = youTubeService.LiveBroadcasts.Transition(
                    LiveBroadcastsResource.TransitionRequest.BroadcastStatusEnum.Testing, returnedBroadcast.Id, "status");

            Console.WriteLine("\n================== Transition Status==================\n");
            Console.WriteLine("Transition Status :: " + broadCastTrans.BroadcastStatus);

            //broadCastTrans.Execute();
        }


어찌하면 LiveStream으로 data를 전송해서 LiveStream의 Status를 activity 로 바꿀 수 있을까요?

선배님들 저 좀 도와주세요 ㅠ.ㅠ

0
0
  • 답변 2

  • 밥도둑계장
    579
    2018-10-01 17:38:02 작성 2018-10-01 17:41:12 수정됨

    음..검색좀 해봣는데. 라이브스트림 객체 자체에 insert 메소드가 구현되어있는거 같은데요..

    https://developers.google.com/youtube/v3/live/docs/liveStreams/insert#examples

    맞는지는 모르겠는데..

    꼭 성공하시길!! 힘내세용

    다른분들이 도와주실꺼임ㅎ

    0
  • 이기현
    211
    2018-10-01 17:50:53 작성 2018-10-01 17:51:14 수정됨

    일단 답글 달아주셔서 감사합니다!

    제가 파악한바로는 라이브스트림 객체 자체의 INSERT 메소드는 객체를 생성하는  메소드입니다.

    데이터를 전송하는 메소드가 아닌걸로 보구있어요 ㅠㅠ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.