概要
Python上でRTSPリンクのステータスコードを取得したいです。requestsは使えませんでした。
現在の状況
Kodi(旧XBMC)で、AbemaTVを受信するPythonアドオンを制作しています。
本当はHLSを直接受信したいのですが、どうも上手くいかないので、とりあえずVLCでRTSPに変えてから再生することにしました。
streamlink (アベマのリンク) 720p --player="cvlc --sout '#rtp{sdp=rtsp://:8554/}'"
再生自体は上手くいくのですが、CMのタイミングで再生が止まります。Filtering out segments and pausing stream outputと出ていたので調べてみたところ、StreamlinkはCMのタイミングで一度ストリームを止める、ということが分かりました。(アベマは映像ごとに動画サイズが違うので、エラーを起こさないようにする目的らしいです。)
そこで、試しに以下のようなコードを書き、サーバーの動きを確認してみることにしました。
Python
1 2 from resources import streamlink 3 import vlc 4 import socket 5 import time 6 import rtsp 7 8 #リンクの設定 9 abema_news = "rtsp://127.0.0.1:8553" 10 11 #VLCの設定 12 player = vlc.MediaPlayer() 13 player.set_mrl(abema_news) 14 already_play = False 15 loop = True 16 17 #TCPポートテスト 18 host = '127.0.0.1' 19 port = 8554 20 timeout_seconds = 1 21 22 count = 0 23 24 #RTSPの設定 25 RTSP_URL = f"rtsp://127.0.0.1:8554" 26 client = rtsp.Client(rtsp_server_uri=RTSP_URL, verbose=True) 27 # client.read() 28 29 while loop == True: 30 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 31 sock.settimeout(timeout_seconds) 32 result = sock.connect_ex((host,int(port))) 33 34 count +=1 35 if result == 0: 36 print("Host: {}, Port: {} - True".format(host, port)) 37 else: 38 print("Host: {}, Port: {} - False".format(host, port)) 39 loop = False 40 print(str(count)) 41 time.sleep(timeout_seconds)
しかし、結果は上手く行きませんでした。CMのタイミングでこのプログラムが止まらなかったので、恐らくはサーバー自体は開きっぱなしなのだと思います。
そこで、次なる案としてRTSPのステータスコードを取得したかったのですが、requestsはhttp/https用なので、rtspのリンクに対してはエラーが出ます。
Python上でRTSPのステータスコードを取得する方法をご存じの方はいらっしゃいませんか。
初心者なので、どこまでの情報が必要かわかっておりません。必要があれば追記いたしますので、ご教授ください。
あなたの回答
tips
プレビュー