【问题标题】:Pychromecast script no longer casting to screenPychromecast 脚本不再投射到屏幕
【发布时间】:2022-12-25 20:03:19
【问题描述】:

我有一个小的 python 脚本,它应该投射任何提供的媒体文件并在我指定的任何设备上显示它。前几天它运行得很好,但是在第二天早上进行了一些测试后,脚本不再投射。我的终端中没有弹出任何运行时错误,Visual Studio Code 的问题选项卡中也没有任何陈述的问题。因此,除了查看代码以查看我是否有不属于的东西之外,我不太确定我可以提供哪些其他信息会有帮助。

import time
import pychromecast

#List chromecasts on the network, but don't connect
services, browser = pychromecast.discovery.discover_chromecasts()
#print(*services, sep='\n')
#print(browser, sep='\n')
#Shut down discovery
pychromecast.discovery.stop_discovery(browser)

#Discover and connect to chromecasts named Waiting Area TV
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=['Atlas Conference TV'])

#print(chromecasts)
#print('\n')
#print(browser)
#print('\n')
#print([cc.name for cc in chromecasts])

for cast in chromecasts:
    # Start worker thread and wait for cast device to be ready
    cast.wait()
    #DeviceStatus(friendly_name='Atlas Conference TV', model_name='Chromecast', manufacturer='Google Inc.', uuid=UUID('df6944da-f016-4cb8-97d0-3da2ccaa380b'), cast_type='cast')

    print(cast.status)
    #CastStatus(is_active_input=True, is_stand_by=False, volume_level=1.0, volume_muted=False, app_id='CC1AD845', display_name='Default Media Receiver', namespaces=['urn:x-cast:com.google.cast.player.message', 'urn:x-cast:com.google.cast.media'], session_id='CCA39713-9A4F-34A6-A8BF-5D97BE7ECA5C', transport_id='web-9', status_text='')
    mc = cast.media_controller
    mc.play_media('http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', 'video/mp4')
    print(mc.status)
    #MediaStatus(current_time=42.458322, content_id='http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', content_type='video/mp4', duration=596.474195, stream_type='BUFFERED', idle_reason=None, media_session_id=1, playback_rate=1, player_state='PLAYING', supported_media_commands=15, volume_level=1, volume_muted=False)
    time.sleep(10)

time.sleep(20)

for cast in chromecasts:
    cast.wait()
    mc = cast.media_controller
    mc.stop()
    print('\n')
    print(f"Cast: [{cast}]... \nShould be playing... \ntime to stop it.")
    print(cast.status)
    time.sleep(2)
    cast.wait()
    cast.quit_app()
    print(cast.status)
# # Shut down discovery
pychromecast.discovery.stop_discovery(browser)

【问题讨论】:

    标签: python api visual-studio-code


    【解决方案1】:

    这是一个老问题,但万一有人再次通过它, 您需要定义您的应用程序 ID 并将其传递给“CastStatus”

    import time
    import pychromecast
    from pychromecast.controllers.receiver import CastStatus
    
    #List chromecasts on the network, but don't connect
    services, browser = pychromecast.discovery.discover_chromecasts()
    #print(*services, sep='
    ')
    #print(browser, sep='
    ')
    #Shut down discovery
    pychromecast.discovery.stop_discovery(browser)
    
    #Discover and connect to chromecasts named Waiting Area TV
    chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=['Family Room TV'])
    
    #print(chromecasts)
    #print('
    ')
    #print(browser)
    #print('
    ')
    #print([cc.name for cc in chromecasts])
    
    app_id = '545??????'
    
    for cast in chromecasts:
        # Start worker thread and wait for cast device to be ready
        cast.wait()
        #DeviceStatus(friendly_name='Atlas Conference TV', model_name='Chromecast', manufacturer='Google Inc.', uuid=UUID('df6944da-f016-4cb8-97d0-3da2ccaa380b'), cast_type='cast')
    
        print(cast.status)
        CastStatus(is_active_input=True, icon_url='', volume_control_type=1, is_stand_by=False, volume_level=1.0,
                   volume_muted=False, app_id=app_id, display_name='Default Media Receiver',
                   namespaces=['urn:x-cast:com.google.cast.player.message', 'urn:x-cast:com.google.cast.media'],
                   session_id='CCA39713-9A4F-34A6-A8BF-5D97BE7ECA5C', transport_id='web-9', status_text='')
    
        #CastStatus(is_active_input=True, is_stand_by=False, volume_level=1.0, volume_muted=False, app_id='CC1AD845', display_name='Default Media Receiver', namespaces=['urn:x-cast:com.google.cast.player.message', 'urn:x-cast:com.google.cast.media'], session_id='CCA39713-9A4F-34A6-A8BF-5D97BE7ECA5C', transport_id='web-9', status_text='')
        mc = cast.media_controller
        mc.play_media('http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', 'video/mp4')
        print(mc.status)
        #MediaStatus(current_time=42.458322, content_id='http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', content_type='video/mp4', duration=596.474195, stream_type='BUFFERED', idle_reason=None, media_session_id=1, playback_rate=1, player_state='PLAYING', supported_media_commands=15, volume_level=1, volume_muted=False)
        time.sleep(10)
    
    time.sleep(20)
    
    for cast in chromecasts:
        cast.wait()
        mc = cast.media_controller
        mc.stop()
        print('
    ')
        print(f"Cast: [{cast}]... 
    Should be playing... 
    time to stop it.")
        print(cast.status)
        time.sleep(2)
        cast.wait()
        cast.quit_app()
        print(cast.status)
    # # Shut down discovery
    pychromecast.discovery.stop_discovery(browser)
    

    【讨论】: