aau-zid / BigBlueButton-liveStreaming

Streams a given BBB Meeting to an RTMP Server.
GNU General Public License v3.0
200 stars 159 forks source link

Question around starting meeting #32

Closed lukaszsadowski1 closed 4 years ago

lukaszsadowski1 commented 4 years ago

Hi,

I created a test meeting and configured You app to join that meeting. I see that live user is showing for a moment with headset icon but after while he just gets kicked out.

Did You have that happening also?

mikosche commented 4 years ago

Hi,

please have a look in the docker logs. The simpliest way is to start the container without '-d' so it will not run as a daemon. If you need help, please post the logs, so we can see whats wrong.

Cheers, Michael

lukaszsadowski1 commented 4 years ago

I get

INFO:root:Open BBB and hide elements!! INFO:root:create_meeting... INFO:root:get_join_url... Traceback (most recent call last): File "stream.py", line 157, in bbb_browser() File "stream.py", line 80, in bbb_browser browser.find_element_by_id('message-input').send_keys("This meeting is streamed to: %s" % args.target) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webelement.py", line 479, in send_keys 'value': keys_to_typing(value)}) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute return self._parent.execute(command, params) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable (Session info: chrome=81.0.4044.138) xvfb-run: error: Xvfb failed to start

niedz., 31 maj 2020 o 01:02 Michael Koscher notifications@github.com napisał(a):

Hi,

please have a look in the docker logs. The simpliest way is to start the container without '-d' so it will not run as a daemon. If you need help, please post the logs, so we can see whats wrong.

Cheers, Michael

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/aau-zid/BigBlueButton-liveStreaming/issues/32#issuecomment-636395864, or unsubscribe https://github.com/notifications/unsubscribe-auth/AD7GK4FO5DSKQ2WB3TYNM6LRUGF7TANCNFSM4NO4LHXQ .

-- Pozdrawiam Łukasz Sadowski

mikosche commented 4 years ago

We are trying to write a message in the public chat "This meeting is streamed to: TARGET_URL". But it seems like that the chat input field isn't visible, so selenium throws a 'ElementNotInteractableException' and stops working. Can you check if the chat is visible when you entering the room?

Cheers

lukaszsadowski1 commented 4 years ago

Solved!

By default school that uses my servers have blocked public chat. Thats why selenium was not able to find that input.

Thanks

lukaszsadowski1 commented 4 years ago

Hmm, now it gets disconnected also but for some other reason.

[x11grab @ 0x556cdac41780] Stream #0: not enough frames to estimate rate; consider increasing probesize Input #0, x11grab, from ':122': Duration: N/A, start: 1590881112.874467, bitrate: N/A Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 29.97 fps, 1000k tbr, 1000k tbn, 1000k tbc Guessed Channel Layout for Input Stream #1.0 : stereo Input #1, alsa, from 'pulse': Duration: N/A, start: 1590881112.896270, bitrate: 1536 kb/s Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s rtmp://HOST/live: Input/output error

mikosche commented 4 years ago

I'm glad to hear that it works now. We are currently working on more options and a better exception handling and we will consider that the chat isn't visible on every server.

This looks more like there is a problem with the rtmp server. Are you using a NGINX and RTMP-Module?

lukaszsadowski1 commented 4 years ago

Yes, I just installed ubuntu + nginx + rtmp module with some basic settings.

If I open rtmp://192.109.240.158/live in vlc player the address respondes so vlc player doesnt return any error.

I wonder, do You have maybe same nginx configuration for that module?

Or maybe You know what is the fastest way to deploy streaming server so I can just put a video player on to some site with stream address.

mikosche commented 4 years ago

I have put my nginx config in the issue #31 maybe this will help.

mikosche commented 4 years ago

This is a simple player that i'm using for testing, but it also works well with vlc.

   <head>
   <title>Live Stream</title>
   <link href="https://vjs.zencdn.net/7.6.5/video-js.css" rel="stylesheet">
   <script
   src="https://code.jquery.com/jquery-3.5.1.min.js"
   integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
   crossorigin="anonymous"></script>
   </head>
    
   <body>
    
  <h1>Live Stream</h1>
   <div style="float:left; width:49%">
   <video id='my-video-live' class="video-js vjs-default-skin" width='760' height='400'>
   <source src="https://URL_TO_STREAMING_HOST/index.m3u8">
   <p class='vjs-no-js'>
   To view this video please enable JavaScript, and consider upgrading to a web browser that
   <a href='http://videojs.com/html5-video-support/' target='_blank'>supports HTML5 video</a>
   </p>
   </video>
    
   <script src='https://vjs.zencdn.net/7.6.6/video.js'></script>
   <script type="application/javascript">
   var options =
  {
   controls: true
   };
   videojs.log.level('debug');
   var player2 = videojs('my-video-live',options);
    
    
   </script>
    
  </body>
lukaszsadowski1 commented 4 years ago

I have put my nginx config in the issue #31 maybe this will help.

What is the rmtp url with Your nginx.conf? Can You paste an example url for connecting Your app to stream_url

mikosche commented 4 years ago

I stream from BBB to rtmp://HOST/stream/STREAMING_KEY This application transcodes the stream in one or more different resolutions to the hls application which does the HLS stuff At the end i can access the stream with https://HOST/live/STREAMING_KEY.m3u8 or https://HOST/live/STREAMING_KEY_PREFIX/index.m3u8 The PREFIX is set in the hls application

I hope this will help you and you understand what i mean

lukaszsadowski1 commented 4 years ago

I finally made it works. When it runs it is really working pretty cool. Good work.

Few ideas from my side about what would be helpful:

  1. Run more streams on one docker instance
  2. Some sort of options on the virtual user that is logging
  3. Each time when I end stream I need to change name of rtmp channel because next time it just wont start.
mtsonline commented 4 years ago

Great, that it works for you now.

  1. Run more streams on one docker instance this may be a problem of hardware limitations. what do you mean with more streams. More streams of the same room to multiple targets? Or more rooms and targets?

  2. Some sort of options on the virtual user that is logging

which options are you thinking about?

  1. Each time when I end stream I need to change name of rtmp channel because next time it just >wont start.

what does not start? We always use the same name for our testinstance - since a few weeks now ;-)

lukaszsadowski1 commented 4 years ago

@mtsonline

  1. The one that would be really cool is to somehow hide/show presantation of live stream user. If this is selenium maybe virtual user could follow commands on chat? For example: if I type presentation ON ,selenium would click on presentation icon, on presentation OFF the presentation would minify.

Where are You binding scenarios for that user?

LoicBonavent commented 4 years ago

Hello, @lukaszsadowski1 For your problem, "Each time when I end stream I need to change name of rtmp channel because next time it just >wont start.", have you tried a "docker-compose down" (not only a Ctrl+C) ? For me, this was the problem. Regards

lukaszsadowski1 commented 4 years ago

Hello, @lukaszsadowski1 For your problem, "Each time when I end stream I need to change name of rtmp channel because next time it just >wont start.", have you tried a "docker-compose down" (not only a Ctrl+C) ? For me, this was the problem. Regards

Thanks, this way it works.

mtsonline commented 4 years ago

...thanks. regarding the stop/start problem. the readme says you should start and stop, so I did not have thought, that you would not have done that. ;-) But of course it won't work, if you still haven't stopped the old streamer...

The idea to remote control the streamer via the chat is nice. Really could be handy. we will have to check how and if this could be done in a stable way. ... or if someone wants to contribute such a functionality - we would be happy. cheers

lukaszsadowski1 commented 4 years ago

For the live messaging the docker needs to be on the same server as the meeting?

mtsonline commented 4 years ago

are you refering to the chatFeedback? no, this is done via a redis connection, so you would just have to make sure, the php (or what ever system you use) file has access to the redis port on the streamer host, that you configured.

we did not secure the redis db yet, so make sure you protect it with a firewall. cheers Martin

lukaszsadowski1 commented 4 years ago

@mtsonline

On server A I have bbb On server B I have docker with streaming On server B I have video player streaming data to users

I enabled docker image from example with chat. In Yours sendmessage file You are loading class Redis that doesnt exist. Assuming that I will install Redis class with composer my question is to how can I connect Redis and publish message. I mean the host and redis_channel

Where should I get that config data? $redis->pconnect('REDIS_HOST'); // REDIS_HOST hast to be the same as in BBB_REDIS_HOST $redis->publish('REDIS_CHANNEL', $message); // REDIS_CHANNEL hast to be the same as in BBB_REDIS_CHANNEL

mtsonline commented 4 years ago

hi,

not sure what you are looking for. in the docker-compose you already have the image of redis, that will install / start the server. here the config also is already included.

so in the php script you will just enter the port you have set in the docker-compose file and the host, where you start the streamer and redis. make sure the port is open in the firewall for the host where you run the player ... hth

lukaszsadowski1 commented 4 years ago

@mtsonline Sorry sometimes I confuse myself :)

I was missing redis.so extension.

What I mean is that BBB_REDIS_HOST by default is redis If I do as in Your example msg box pconnect('redis') I get hp_network_getaddresses: getaddrinfo failed: Name or service not known.

What are the default host settings that pconnect should have inside pconnect method?

lukaszsadowski1 commented 4 years ago

@mtsonline Sorry sometimes I confuse myself :)

I was missing redis.so extension.

What I mean is that BBB_REDIS_HOST by default is redis If I do as in Your example msg box pconnect('redis') I get hp_network_getaddresses: getaddrinfo failed: Name or service not known.

What are the default host settings that pconnect should have inside pconnect method?

Nevermind everything is solved. Thanks for help in earlier matters.

mtsonline commented 4 years ago

great, that everything is working now. just for others having the same issue: I guess you do not have the chat feedback in a docker on the same host, then you cannot use the special host "REDIS", this only works for docker containers within the same network.

lukaszsadowski1 commented 4 years ago

For others:

If You want to put chat window in some other application but on the same server (outside the docker) You shoud add in docker-compose this port line below

redis: image: redis ports:

The bbb redis host can be the same as default redis

To connect to redis and publish message to chat You connect with $redis->pconnect('localhost', 6379);