C#.NET Q&A

c# 유튜브 live streaming app 개발 중입니다. 이기현 평점: 없음 조회: 376

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 로 바꿀 수 있을까요?

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

태그 : #C #WPF #YouTube Api
작성자 정보
이기현
Level 9
 [EXP.4/14]

메일:  비공개
글등록 +12 72 덧글등록 +3 6
자기소개
열심히 공부중입니다!
글 공유하기 |
  tweet facebook
2018-10-01 오후 4:08:43
나도한마디
사용자
롬메달            [2018-10-02]
Level 52
 [EXP.8/250]
이런거 저런거 골치 아파서 오픈소스 사용하는 방법도 있을텐데.....

찾아봐야 겠네요..
태그로 엮인글
[C#.NET Q&A] .NET Web API 서버 호출 시 DateTime 파라미터 값이 API 에서 변경 됩니다.[1]+1  애기곰
[WPF Q&A] GIF 이미지 멈춤현상[5]+4  news0516
[C#.NET Q&A] C# 웹 API 연동시 JSON PUT방식[1]  악어
[C#.NET Q&A] c# 유튜브 api live streaming 기능 구현[2]  이기현
[WPF Q&A] Listview에서 출력된 column 값 질문[2]+2  Sad7Dayz
[C#.NET Q&A] 우편번호 api를 사용하고 싶습니다.[1]+1  cyc31041
[C#.NET Q&A] API 일정 주기 호출 및 데이터처리 방안 문의  손잡이
[구인&교육정보] [금융 IT] ASP 서버 개발자 모집  연민의굴레
[자유게시판] c언어로 타자연습 프로그램 개발하려는 프로그램 개발 초짜입니다. 질문좀 답해주세요[2]  게이머여울
[구인&교육정보] [정부지원무료교육] NCS Java 기반 디지털컨버전스 머신러닝 플랫폼 응용 S/W엔지니어링 구직자 과정  러브핵
글리스트
datagridview addrow speed 문제?[1]  hoon
여러개 루트를 가진 xml파일 읽어오기[1]  섭융
미쓰비시 PLC 통신 이더넷 통신 도움주시면 감사하겠습니다ㅠ[1]  tokhi
윈폼 폼 질문드립니다.[1]+1  키모
C# textBox 줄 간격 질문입니다. (텍스트 박스, 줄간격,여백)  프린이
C# Instance 생성시 Method가 stack에 올라가는 타이밍 질문[4]  한량품
Excel oledb이용해서 그리드뷰에 출력하고싶어요[1]+1  방랑이z
C# 웹 API 연동시 JSON PUT방식[1]  악어
시리얼 통신 궁금한 점이 있습니다![3]+1  tokhi
FindWindow관련 질문입니다.[2]+3  덱스터v
 ★현재글->   c# 유튜브 live streaming app 개발 중입니다.[1]  이기현
c# winform webBrowser[1]  hoon
List<> 빠르게검색하는방법 질문입니다[3]  엿장수
C# Window Form 마우스좌표와 키보드입력에 대해 질문드립니다.  기나규
C# 문자 질문드립니다.  키모
윈폼 리스트박스 스크롤 사이즈 질문드립니다.[1]+1  키모
Form Size에 맞게 Font Size 증가시키기 도와 주세요.[1]  악마성
통신연결 문제 도와주세요[1]  쥬까쥬
파일 입출력 관련해서 질문드립니다...[1]  NILLS
C#에서 하나의 그키를 한번눌렀을때 실행하고 다시누르면 종료하도록 할려면어떻게하나요[1]  REROK
c# 유튜브 api live streaming 기능 구현[2]  이기현