o
    ۷i                     @   s,   d dl ZdedeejeeB f fddZdS )    N	video_urlreturnc              
      s  ddl }ddl ddlddlm} || }d}dtdtfdd}dtd	tdtffd
d}dtdttj	t
tB f fdd}dtddf fdd}zo|jdv rd||| I dH }	|||	dI dH }n4|jdkruddlm}
 |
|j}n#|jdkrddl}| dd\}}||}	|||	dI dH }n| }|||I dH \}}||fW |r|jdv r|||I dH  S S S |r|jdv r|||I dH  w w w )zExtract audio from a video URL using librosa.

    Returns a (audio_array, sample_rate) tuple compatible with audio format.
    All blocking I/O operations are run in a thread pool.
    r   N)urlparseurlr   c                 S   s   ddl m} ||  S )Nr   )urlopen)urllib.requestr   read)r   r    r	   V/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm_omni/entrypoints/chat_utils.py_download_video_sync   s   z<extract_audio_from_video_async.<locals>._download_video_syncdatasuffixc                    sB    j d|d}||  |jW  d    S 1 sw   Y  d S )NF)deleter   )NamedTemporaryFilewritename)r   r   	temp_file)tempfiler	   r
   _write_temp_file_sync   s   
$z=extract_audio_from_video_async.<locals>._write_temp_file_sync	file_pathc                 S   s   dd l }|j| ddS )Nr   i>  )sr)librosaload)r   r   r	   r	   r
   _load_audio_sync   s   z8extract_audio_from_video_async.<locals>._load_audio_syncc                    s8   z j | r |  W d S W d S  ty   Y d S w )N)pathexistsunlinkOSError)r   )osr	   r
   _cleanup_file_sync!   s   z:extract_audio_from_video_async.<locals>._cleanup_file_sync)httphttpsz.mp4file)url2pathname,   )r    r!   r   )asyncior   r   urllib.parser   strbytestuplenpndarrayintfloatscheme	to_threadr   r#   r   base64split	b64decode)r   r&   r   
parsed_urltemp_video_file_pathr   r   r   r   
video_datar#   r1   headerr   audio_arraysample_rater	   )r   r   r
   extract_audio_from_video_async   s>    



r:   )numpyr+   r(   r*   r,   r-   r.   r:   r	   r	   r	   r
   <module>   s    $