質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1471閲覧

PythonでRTSPのステータスコードを受け取りたい

KSW_1024

総合スコア0

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/04/11 22:18

編集2022/04/11 22:25

概要

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 2from​ ​resources​ ​import​ ​streamlink 3import​ ​vlc 4import​ ​socket 5import​ ​time 6import​ ​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 29while​ ​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のステータスコードを取得する方法をご存じの方はいらっしゃいませんか。

初心者なので、どこまでの情報が必要かわかっておりません。必要があれば追記いたしますので、ご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問