I'm trying to create a new broadcast on the channel and then start the stream so that the video is broadcast, the problem is that I can't start the broadcast after it is created, it is in the scheduled, how can I start the broadcast?
import datetimeimport jsonimport osimport threadingimport timeimport cv2import subprocessfrom google.auth.transport.requests import Requestfrom google.oauth2.credentials import Credentialsfrom google_auth_oauthlib.flow import InstalledAppFlowfrom googleapiclient.discovery import buildAPP_TOKEN_FILE = "client_secret.json"USER_TOKEN_FILE = "user_token.json"SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl','https://www.googleapis.com/auth/userinfo.profile',]def get_stream_info(stream_id): creds = get_creds_saved() service = build('youtube', 'v3', credentials=creds) request = service.liveBroadcasts().list( part='snippet,contentDetails,status', id=stream_id ) response = request.execute() if 'items' in response and len(response['items']) > 0: return response['items'][0] else: return Nonedef get_creds_cons(): # Create credentials via console flow flow = InstalledAppFlow.from_client_secrets_file(APP_TOKEN_FILE, SCOPES) return flow.run_console()def get_creds_saved(): creds = None if os.path.exists(USER_TOKEN_FILE): # Load user credentials from a saved file creds = Credentials.from_authorized_user_file(USER_TOKEN_FILE, SCOPES) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: # Create new credentials via local server flow flow = InstalledAppFlow.from_client_secrets_file(APP_TOKEN_FILE, SCOPES) creds = flow.run_local_server(port=0) with open(USER_TOKEN_FILE, 'w') as token: token.write(creds.to_json()) return credsdef get_service(): # Get YouTube API service using credentials creds = get_creds_saved() service = build('youtube', 'v3', credentials=creds) return servicedef create_live_stream(title, description): service = get_service() scheduled_start_time = datetime.datetime.utcnow().isoformat() request = service.liveBroadcasts().insert( part="snippet,status,contentDetails", body={"snippet": {"title": title,"description": description,"scheduledStartTime": scheduled_start_time, },"status": {"privacyStatus": "private","lifeCycleStatus": "ready","recordingStatus": "notRecording","selfDeclaredMadeForKids": False },"contentDetails": {"enableAutoStart": False } } ) response = request.execute() return response['id']def stream_video(video_path, stream_key): args = ['-re','-i', video_path,'-c:v', 'libx264','-preset', 'veryfast','-c:a', 'aac','-f', 'flv', f'rtmp://a.rtmp.youtube.com/live2/{stream_key}' ] subprocess.run(['ffmpeg'] + args)def get_scheduled_stream_info(stream_id): creds = get_creds_saved() service = build('youtube', 'v3', credentials=creds) request = service.liveBroadcasts().list( part='snippet,status', id=stream_id ) response = request.execute() if 'items' in response and len(response['items']) > 0: return response['items'][0] else: return Noneif __name__ == '__main__': print("** Hello, Azzrael_YT subscribers!!!\n") strId = create_live_stream("tittle", "description") pretty_json = json.dumps(get_scheduled_stream_info(strId), indent=4) print(pretty_json) # Stream video video_path = "C:/Users/admin/PycharmProjects/pythonProject/video.mp4" # Update this with your video file path stream_key = 'dh9z-jtkx-wbq3-6wvp-2tac' # Replace with your YouTube stream key video_thread = threading.Thread(target=stream_video, args=(video_path, stream_key)) #video_thread.start()json responce info from created stream:},"scheduledStartTime": "2023-08-20T10:51:22Z","isDefaultBroadcast": false,"liveChatId": "KicKGFVDZ01UNS1CLVNfV0FJencxVXY4cC1ZQRILSG9QU0RJZ2hQMkE"},"status": {"lifeCycleStatus": "created","privacyStatus": "private","recordingStatus": "notRecording","madeForKids": false,"selfDeclaredMadeForKids": false}}
