Update app.py
Browse files
app.py
CHANGED
|
@@ -21,7 +21,7 @@ from aiortc.contrib.media import MediaPlayer
|
|
| 21 |
|
| 22 |
from streamlit_webrtc import (
|
| 23 |
AudioProcessorBase,
|
| 24 |
-
|
| 25 |
VideoProcessorBase,
|
| 26 |
WebRtcMode,
|
| 27 |
webrtc_streamer,
|
|
@@ -78,12 +78,8 @@ def download_file(url, download_to: Path, expected_size=None):
|
|
| 78 |
progress_bar.empty()
|
| 79 |
|
| 80 |
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
media_stream_constraints={
|
| 84 |
-
"video": True,
|
| 85 |
-
"audio": True,
|
| 86 |
-
},
|
| 87 |
)
|
| 88 |
|
| 89 |
|
|
@@ -154,12 +150,7 @@ def main():
|
|
| 154 |
|
| 155 |
def app_loopback():
|
| 156 |
""" Simple video loopback """
|
| 157 |
-
webrtc_streamer(
|
| 158 |
-
key="loopback",
|
| 159 |
-
mode=WebRtcMode.SENDRECV,
|
| 160 |
-
client_settings=WEBRTC_CLIENT_SETTINGS,
|
| 161 |
-
video_processor_factory=None, # NoOp
|
| 162 |
-
)
|
| 163 |
|
| 164 |
|
| 165 |
def app_video_filters():
|
|
@@ -211,7 +202,7 @@ def app_video_filters():
|
|
| 211 |
webrtc_ctx = webrtc_streamer(
|
| 212 |
key="opencv-filter",
|
| 213 |
mode=WebRtcMode.SENDRECV,
|
| 214 |
-
|
| 215 |
video_processor_factory=OpenCVVideoProcessor,
|
| 216 |
async_processing=True,
|
| 217 |
)
|
|
@@ -260,7 +251,7 @@ def app_audio_filter():
|
|
| 260 |
webrtc_ctx = webrtc_streamer(
|
| 261 |
key="audio-filter",
|
| 262 |
mode=WebRtcMode.SENDRECV,
|
| 263 |
-
|
| 264 |
audio_processor_factory=AudioProcessor,
|
| 265 |
async_processing=True,
|
| 266 |
)
|
|
@@ -292,7 +283,7 @@ def app_delayed_echo():
|
|
| 292 |
webrtc_ctx = webrtc_streamer(
|
| 293 |
key="delay",
|
| 294 |
mode=WebRtcMode.SENDRECV,
|
| 295 |
-
|
| 296 |
video_processor_factory=VideoProcessor,
|
| 297 |
audio_processor_factory=AudioProcessor,
|
| 298 |
async_processing=True,
|
|
@@ -410,7 +401,7 @@ def app_object_detection():
|
|
| 410 |
webrtc_ctx = webrtc_streamer(
|
| 411 |
key="object-detection",
|
| 412 |
mode=WebRtcMode.SENDRECV,
|
| 413 |
-
|
| 414 |
video_processor_factory=MobileNetSSDVideoProcessor,
|
| 415 |
async_processing=True,
|
| 416 |
)
|
|
@@ -539,19 +530,14 @@ def app_streaming():
|
|
| 539 |
|
| 540 |
return av.VideoFrame.from_ndarray(img, format="bgr24")
|
| 541 |
|
| 542 |
-
WEBRTC_CLIENT_SETTINGS.update(
|
| 543 |
-
{
|
| 544 |
-
"media_stream_constraints": {
|
| 545 |
-
"video": media_file_info["type"] == "video",
|
| 546 |
-
"audio": media_file_info["type"] == "audio",
|
| 547 |
-
}
|
| 548 |
-
}
|
| 549 |
-
)
|
| 550 |
-
|
| 551 |
webrtc_ctx = webrtc_streamer(
|
| 552 |
key=f"media-streaming-{media_file_label}",
|
| 553 |
mode=WebRtcMode.RECVONLY,
|
| 554 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 555 |
player_factory=create_player,
|
| 556 |
video_processor_factory=OpenCVVideoProcessor,
|
| 557 |
)
|
|
@@ -574,7 +560,8 @@ def app_sendonly_video():
|
|
| 574 |
webrtc_ctx = webrtc_streamer(
|
| 575 |
key="video-sendonly",
|
| 576 |
mode=WebRtcMode.SENDONLY,
|
| 577 |
-
|
|
|
|
| 578 |
)
|
| 579 |
|
| 580 |
image_place = st.empty()
|
|
@@ -602,7 +589,8 @@ def app_sendonly_audio():
|
|
| 602 |
key="sendonly-audio",
|
| 603 |
mode=WebRtcMode.SENDONLY,
|
| 604 |
audio_receiver_size=256,
|
| 605 |
-
|
|
|
|
| 606 |
)
|
| 607 |
|
| 608 |
fig_place = st.empty()
|
|
@@ -675,19 +663,20 @@ def app_sendonly_audio():
|
|
| 675 |
def app_media_constraints():
|
| 676 |
""" A sample to configure MediaStreamConstraints object """
|
| 677 |
frame_rate = 5
|
| 678 |
-
WEBRTC_CLIENT_SETTINGS.update(
|
| 679 |
-
ClientSettings(
|
| 680 |
-
media_stream_constraints={
|
| 681 |
-
"video": {"frameRate": {"ideal": frame_rate}},
|
| 682 |
-
},
|
| 683 |
-
)
|
| 684 |
-
)
|
| 685 |
webrtc_streamer(
|
| 686 |
key="media-constraints",
|
| 687 |
mode=WebRtcMode.SENDRECV,
|
| 688 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 689 |
)
|
| 690 |
-
st.write(f"The frame rate is set as {frame_rate}")
|
| 691 |
|
| 692 |
|
| 693 |
def app_programatically_play():
|
|
@@ -698,7 +687,7 @@ def app_programatically_play():
|
|
| 698 |
key="media-constraints",
|
| 699 |
desired_playing_state=playing,
|
| 700 |
mode=WebRtcMode.SENDRECV,
|
| 701 |
-
|
| 702 |
)
|
| 703 |
|
| 704 |
|
|
|
|
| 21 |
|
| 22 |
from streamlit_webrtc import (
|
| 23 |
AudioProcessorBase,
|
| 24 |
+
RTCConfiguration,
|
| 25 |
VideoProcessorBase,
|
| 26 |
WebRtcMode,
|
| 27 |
webrtc_streamer,
|
|
|
|
| 78 |
progress_bar.empty()
|
| 79 |
|
| 80 |
|
| 81 |
+
RTC_CONFIGURATION = RTCConfiguration(
|
| 82 |
+
{"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
)
|
| 84 |
|
| 85 |
|
|
|
|
| 150 |
|
| 151 |
def app_loopback():
|
| 152 |
""" Simple video loopback """
|
| 153 |
+
webrtc_streamer(key="loopback")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
|
| 156 |
def app_video_filters():
|
|
|
|
| 202 |
webrtc_ctx = webrtc_streamer(
|
| 203 |
key="opencv-filter",
|
| 204 |
mode=WebRtcMode.SENDRECV,
|
| 205 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 206 |
video_processor_factory=OpenCVVideoProcessor,
|
| 207 |
async_processing=True,
|
| 208 |
)
|
|
|
|
| 251 |
webrtc_ctx = webrtc_streamer(
|
| 252 |
key="audio-filter",
|
| 253 |
mode=WebRtcMode.SENDRECV,
|
| 254 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 255 |
audio_processor_factory=AudioProcessor,
|
| 256 |
async_processing=True,
|
| 257 |
)
|
|
|
|
| 283 |
webrtc_ctx = webrtc_streamer(
|
| 284 |
key="delay",
|
| 285 |
mode=WebRtcMode.SENDRECV,
|
| 286 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 287 |
video_processor_factory=VideoProcessor,
|
| 288 |
audio_processor_factory=AudioProcessor,
|
| 289 |
async_processing=True,
|
|
|
|
| 401 |
webrtc_ctx = webrtc_streamer(
|
| 402 |
key="object-detection",
|
| 403 |
mode=WebRtcMode.SENDRECV,
|
| 404 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 405 |
video_processor_factory=MobileNetSSDVideoProcessor,
|
| 406 |
async_processing=True,
|
| 407 |
)
|
|
|
|
| 530 |
|
| 531 |
return av.VideoFrame.from_ndarray(img, format="bgr24")
|
| 532 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 533 |
webrtc_ctx = webrtc_streamer(
|
| 534 |
key=f"media-streaming-{media_file_label}",
|
| 535 |
mode=WebRtcMode.RECVONLY,
|
| 536 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 537 |
+
media_stream_constraints={
|
| 538 |
+
"video": media_file_info["type"] == "video",
|
| 539 |
+
"audio": media_file_info["type"] == "audio",
|
| 540 |
+
},
|
| 541 |
player_factory=create_player,
|
| 542 |
video_processor_factory=OpenCVVideoProcessor,
|
| 543 |
)
|
|
|
|
| 560 |
webrtc_ctx = webrtc_streamer(
|
| 561 |
key="video-sendonly",
|
| 562 |
mode=WebRtcMode.SENDONLY,
|
| 563 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 564 |
+
media_stream_constraints={"video": True},
|
| 565 |
)
|
| 566 |
|
| 567 |
image_place = st.empty()
|
|
|
|
| 589 |
key="sendonly-audio",
|
| 590 |
mode=WebRtcMode.SENDONLY,
|
| 591 |
audio_receiver_size=256,
|
| 592 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 593 |
+
media_stream_constraints={"audio": True},
|
| 594 |
)
|
| 595 |
|
| 596 |
fig_place = st.empty()
|
|
|
|
| 663 |
def app_media_constraints():
|
| 664 |
""" A sample to configure MediaStreamConstraints object """
|
| 665 |
frame_rate = 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 666 |
webrtc_streamer(
|
| 667 |
key="media-constraints",
|
| 668 |
mode=WebRtcMode.SENDRECV,
|
| 669 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 670 |
+
media_stream_constraints={
|
| 671 |
+
"video": {"frameRate": {"ideal": frame_rate}},
|
| 672 |
+
},
|
| 673 |
+
video_html_attrs={
|
| 674 |
+
"style": {"width": "50%", "margin": "0 auto", "border": "5px yellow solid"},
|
| 675 |
+
"controls": False,
|
| 676 |
+
"autoPlay": True,
|
| 677 |
+
},
|
| 678 |
)
|
| 679 |
+
st.write(f"The frame rate is set as {frame_rate}. Video style is changed.")
|
| 680 |
|
| 681 |
|
| 682 |
def app_programatically_play():
|
|
|
|
| 687 |
key="media-constraints",
|
| 688 |
desired_playing_state=playing,
|
| 689 |
mode=WebRtcMode.SENDRECV,
|
| 690 |
+
rtc_configuration=RTC_CONFIGURATION,
|
| 691 |
)
|
| 692 |
|
| 693 |
|