Quantcast
Channel: Active questions tagged youtube-api - Stack Overflow
Viewing all articles
Browse latest Browse all 3831

Youtube automatic creating and starting live stream with ffmpeg Python

$
0
0

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?

enter image description here

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}}


Viewing all articles
Browse latest Browse all 3831

Trending Articles