Giter VIP home page Giter VIP logo

broadcast-development-kit's Introduction

Notice

This is a PRE-RELEASE project and is still in development. This project uses the application-hosted media bot SDKs and APIs, which are still in BETA.

The code in this repository is provided "AS IS", without any warranty of any kind. Check the LICENSE for more information.

Broadcast Development Kit

Broadcast Development Kit is a software solution that allows organizations to use a Microsoft Teams meeting in their tenant as a source (and destination) to extract and inject media streams from the meeting (e.g. participants, screen share, etc.) and use them as sources for producing live content.

If you plan to use this solution to extract content for a Teams Meeting, please inform your attendees that you will be streaming their video and audio.

Features

Broadcast Development Kit provides features both to extract and inject media from a Microsoft Teams meeting using either the SRT or the RTMP protocols. We recommend using the SRT protocols whenever possible, and just use RTMP (and RTMPS) if the system receiving / sending the feed does not support SRT.

The solutions works by adding a media bot to the meeting where you want to use this solution and using that media bot to capture the streams from the meeting and injecting new streams into it.

Extraction

The sources that can be used for extraction are:

  • A participant: any participant that has their camera on can be extracted as an individual media stream.

  • The primary speaker: this is a media stream that automatically switches to the participant that is speaking at that time in the call. This allows to switch between participants automatically during a conversation. Only one participant is captured at a time.

  • The screen share: if a participant is sharing their screen, that feed can also be extracted as an individual stream too.

  • Together mode: if together mode is enabled in the meeting, it can be extracted as a separate media stream.

  • Large gallery mode: if large gallery mode is enabled in the meeting, it can be extracted as a separate media stream too.

The solution supports multiple extractions at a time, allowing to stream any combination of the sources listed above (each as a individual stream) over SRT or RTMP to a video mixing solution of your choice.

To provide the best possible experience during a meeting, Microsoft Teams automatically changes the frame size and frame rate of each participant stream based on the network conditions of the participant. However, this can cause issues with using those streams in streaming services of video production solutions. To avoid these issues Broadcast Development Kit automatically upscales the video feed to 1080p at 30FPS. This reduces the complexity of having to work with a variable frame size and frame rate.

Extraction of any of those streams can be done with the following configurations:

  • SRT in "caller" mode (you have a SRT listener waiting to receive a connection from this solution).
  • SRT in "listener" mode (the solution will wait for a SRT caller to connect and get the content).
  • RTMP / RTMPS in "push" mode (you have a RTMP URL you want to push the stream to).
  • RTMP / RTMPS in "pull" mode (the solution will wait for an RTMP client to connect and retrieve the content).

Injection

A feed with audio and video can be injected to the Microsoft Teams meeting. Inside the meeting, the video will look like any other participant in the call. You can then using Microsoft Teams' spotlight functionality to focus the attention of the participants to the video that is being injected.

Broadcast Development Kit supports receiving video and audio in several resolutions and frame rates. It will automatically transform the video feed to 1080p and 30FPS before injecting it into the Microsoft Teams call.

Injection is supported in the following configurations:

  • SRT in "caller" mode (you have an SRT listener waiting for a client to connect).
  • SRT in "listener" mode (the solution will wait for a SRT caller to connect and send the content)
  • RTMP / RTMPS in "pull" mode (you have an RTMP server waiting for a client to connect and pull the content)
  • RTMP / RTMPS in "push" mode (the solution will wait for RTMP content to be pushed into it)

The audio can be muted and unmuted though the API.

Scenarios

The necessities of each organization are different and how they can use this solution depends on what the organization needs to do. Below are some short examples on how this solution can be used in different scenarios.

Sharing a real-time conversation in a streaming platform

A simple use case is wanting to share a stream a conversation to a streaming service, where the "camera" automatically switches to the participant that is speaking. This can be achieved extracting the primary speaker from the meeting and sending it to the streaming service using SRT (or RTMPS).

Producing a show

Let's say that you are producing a show where you plan to interview people and you want to be able to bring that people into the interview remotely using Microsoft Teams. You can extract the interviewers, interviewees and any content shared in the meeting, each as a separate video feed.

Then you can process those feeds in a video production solution of your choosing, do a composition of the different feeds and transmit the show live.

Watch party

If you have media content that can be streamed through SRT or RTMP such as live event or a VOD, you can use the injection feature to playback the video inside the Microsoft Teams meeting to the rest of the participants and watch the stream together.

Limitations and known issues

There are some known issues in the current version of this solution:

  • When injecting content into a meeting using an RTMPS source in pull mode (i.e. you give BDK an RTMPS URL to pull the content from it), if the source stops transmitting content while the injection is still active, then an exception is thrown in the GStreamer pipeline once the injection is stopped in the BDK. This exception causes the Bot Service running in the VM to crash, and you will need to restart the service manually or restart the VM. This issue only occurs when using RTMPS in pull mode. Other combinations (e.g. SRT, RTMP, push mode, etc.) do not present this issue.

This solution currently has some limitations:

  • The audio of all teams participants is shared in a single audio feed. Although all media extractions form the meeting contain both audio and video, the audio of all streams will be the combined audio of the meeting. If you need to use several extractions in a video production solution, use the audio from one of the feeds and mute the rest.

  • No composed view of the call (e.g. 4x4 or 9x9 participants) is available with this solution.

  • The current implementation supports one meeting per VM, and only one VM. Therefore, it can be used only in one meeting at a time. The solution can be updated to support more VM instances running in parallel.

  • While this solution can extract the screen share feed, it cannot extract content that is shared in the meeting. For example, if you share a Power Point presentation directly in the meeting, this solution can not capture and extract that content. That is because while the screen share is a media feed, the content shared directly in the meeting is not.

  • Only one video and audio can be injected into the meeting at a time.

  • There are some restrictions on using this solution to record content from a Microsoft Teams meeting, which are inherited from the Graph Communications Bot Media SDK. Check the documentation of the SDK for more information.

  • The current implementation doesn't catch the errors/warnings messages that third party libraries (like GStreamer or libraries that GStreamer uses) throw to stdout/stderr. While using Start/Stop extraction/injection endpoints, the API will return an OK status code even if the GStreamer pipelines throw errors/warnings. E.g.: If NGINX is not properly configured and the user tries to initialize an RTMP extraction in pull mode, the API will return an OK status code but the GStreamer pipeline won't be able to establish an RTMP connection.

Getting Started

This section will guide you through the process of configuring the solution to run it locally and/or in azure.

How to run the solution

Please follow these documents to build and configure this solution:

You can find how to use the APIs in this solution in the following document:

Adding an UI

This solution doesn't include any UI that can be used to operate the application. However, you can find two UI samples in the following repositories that you can use either locally or in Azure to interact with the solution.

Exploring the repository

The repository is structured in the following directories:

  • src: Contains the source code of the application.
    • BotService: Contains the core component that connects to the meeting and extracts and injects media feeds from and to the meeting.
    • ManagementApi: Contains the main API that is used to interact with the service.
    • OrchestratorFunction: Contains the Azure function in charge of managing the status of the VMs.
  • docs: Contains the documentation on the solution.

Architecture

Reporting issues

Security issues and bugs should be reported privately to the Microsoft Security Response Center (MSRC) at https://msrc.microsoft.com/create-report, or via email to [email protected]. Please check SECURITY for more information on the reporting process.

For non-security related issues, feel free to file an new issue through GitHub Issues.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

Acknowledgments

This project was implemented using the samples in the Microsoft Graph Communications API and Samples repository as a base.

The architecture used in the solution was inspired by the samples in Azure-Samples/PartitionedRepository and ShawnShiSS/clean-architecture-azure-cosmos-db.

The media processing pipelines were creating using GStreamer, and open source multimedia framework.

License

Copyright (c) Microsoft Corporation. All rights reserved.

Licensed under the MIT license.

broadcast-development-kit's People

Contributors

aaronlinne avatar dcherubini avatar dependabot[bot] avatar facundoctes avatar fbridger avatar jonatanmedinilla avatar leolopez-sw avatar microsoft-github-operations[bot] avatar microsoftopensource avatar nelsonsouthworks avatar verdua avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

broadcast-development-kit's Issues

Getting a error 405 when getting call details, even I am able to join the bot to the call

I have set up the solution locally and using postman, I am able to join the bot in to the call, with the follow response
{"id":"1a1e7bef-720f-411c-82dc-164d3dc157fd","resource":{"id":"1a1e7bef-720f-411c-82dc-164d3dc157fd","meetingUrl":"REDACTED","meetingId":"REDACTED","state":0,"createdAt":"2021-08-18T00:51:22.4000531-05:00","startedAt":"0001-01-01T00:00:00","endedAt":"0001-01-01T00:00:00","meetingType":0,"botFqdn":"localhost:9442","botIp":null,"defaultPassphrase":null,"defaultLatency":0,"graphId":null,"streams":[],"injectionStream":null,"publicContext":{},"privateContext":{"streamKey":"FXOkPqTsekSi2gbIMQwgNw"}}}
but I am not able to get the details of the call, even when the bot has been added to the call.

State goes from Establishing to Terminated while joining a meeting

This is follow up on this issue. I've double checked appSettings.local.json (Ngrok part) - values seem to be correct , and the cert - it's registered and CertificateThumbprint in appSettings.local.json is correct. However, I am still seeing the same issue. Also when I do a POST (last step in this document), it returns with OK however, the BotService logs show the same failure:

[14:00:03 INF] Executing action method BotService.Controllers.BotController.OnIncomingRequestAsync (BotService) - Validation state: Valid [14:00:03 INF] Executed action method BotService.Controllers.BotController.OnIncomingRequestAsync (BotService), returned result Microsoft.AspNetCore.Mvc.OkObjectResult in 118.5003ms. [14:02:31 INF] [CallHandler] On updated call - Old State Establishing - New State Terminated

Please advice how I can debug this further.

Local setup error and behavior

Hello Team,

I am trying to get the sample functional in my local environment prior to testing this in Azure. My local environment is Windows 11 insider preview, Visual Studio 2019 and the required pre-requisites that are detailed for a successful install. So far I have tried running the sample using the provided instructions where we make a POST with the meeting url and receive a response. However once this is done, the steps in the "use of management api" starting with initiate-call while it returns a result generates an error: "[20:28:52 INF] Connection id "0HMBKN90LJ54A" bad request data: "Invalid request line: '\x16\x03\x01\x01\x00\x01\x00\x00"

From my experience this is caused when you try to access a http endpoint via https. I have revisited all of the steps multiple times and do not see where this would be the case. Is there any guidance that you can provide? Thank you in advance for your time.

Not able to extract stream due a get frames issue enve the request is 200

Hello team I am creating request to extract a video but all the time seem like the video cannot be encoded due a lot of issues even when the request result is 200,

I already reviewed de firewall and enable the rtmp port go through it and I am running everything in vs in administrator mode.
[19:18:25 INF] [MediaPipeline] default message type: StreamStart, from element: pipeline0
0:06:22.883631100 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:948:gst_ffmpegviddec_get_buffer2:<video_decoder> Couldn't get codec frame !
0:06:22.904296300 26852 0000026AAE6A0A40 ERROR libav :0:: get_buffer() failed
0:06:22.908466100 26852 0000026AAE6A0A40 ERROR libav :0:: thread_get_buffer() failed
0:06:22.927445400 26852 0000026AAE6A0A40 ERROR libav :0:: decode_slice_header error
0:06:22.937077700 26852 0000026AAE6A0A40 ERROR libav :0:: no frame!
0:06:22.948343300 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:1954:gst_ffmpegviddec_handle_frame:<video_decoder> Failed to send data for decoding
0:06:22.968263300 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:948:gst_ffmpegviddec_get_buffer2:<video_decoder> Couldn't get codec frame !
0:06:22.998834300 26852 0000026AAE6A0A40 ERROR libav :0:: get_buffer() failed
0:06:23.006030000 26852 0000026AAE6A0A40 ERROR libav :0:: thread_get_buffer() failed
0:06:23.016378800 26852 0000026AAE6A0A40 ERROR libav :0:: decode_slice_header error
0:06:23.025983500 26852 0000026AAE6A0A40 ERROR libav :0:: no frame!
0:06:23.031853300 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:1954:gst_ffmpegviddec_handle_frame:<video_decoder> Failed to send data for decoding
0:06:23.552056900 [19:18:26 INF] [MediaPipeline] Pipeline state changed message from: rtmp_output, current state: Paused[19:18:26 INF] [MediaPipeline] default message type: Element, from element: audio_identity
26852 0000026AAE6A0980 FIXME aggregator gstaggregator.c:1367:gst_aggregator_aggregate_func: Subclass should call gst_aggregator_selected_samples() from its aggregate implementation.
[19:18:27 INF] [MediaPipeline] default message type: AsyncDone, from element: pipeline0
0:06:25.549771000 26852 0000026AAE6A0980 WARN flvmux gstflvmux.c:1249:gst_flv_mux_buffer_to_tag_internal:muxer:sink_0 Got backwards dts! (0:00:19.845000000 < 0:00:21.280000000)
0:06:25.651618900 26852 0000026AAE6A0980 WARN flvmux gstflvmux.c:1249:gst_flv_mux_buffer_to_tag_internal:muxer:sink_0 Got backwards dts! (0:00:19.868000000 < 0:00:21.280000000)
0:06:27.315000100 26852 0000026AAE6A0980 WARN flvmux gstflvmux.c:1249:gst_flv_mux_buffer_to_tag_internal:muxer:sink_0[19:18:29 INF] [MediaPipeline] Pipeline state changed message from: rtmp_output, current state: Playing
Got backwards dts! (0:00:20.797000000 < 0:00:21.280000000)
[19:18:30 INF] [MediaPipeline] Pipeline state changed message from: pipeline0, current state: Playing
0:06:28.685055500 26852 0000026AAE6A0940 ERROR rtmp :0:: RTMP_Connect0, failed to connect socket. 10061 (Unknown error)
0:06:28.689307000 26852 0000026AAE6A0940 WARN rtmpsink gstrtmpsink.c:294:gst_rtmp_sink_render:<rtmp_output> error: Could not connect to RTMP stream "rtmp://localhost:1940/extraction/lMEUM3UPkcXZrZdaZgw" for writing
0:06:28.837478900 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:948:gst_ffmpegviddec_get_buffer2:<video_decoder> Couldn't get codec frame !
0:06:28.843662900 26852 0000026AAE6A0A40 ERROR libav :0:: get_buffer() failed
0:06:28.848067600 26852 0000026AAE6A0A40 ERROR libav :0:: thread_get_buffer() failed
0:06:28.853233300 26852 0000026AAE6A0A40 ERROR libav :0:: decode_slice_header error
0:06:28.864852300 26852 0000026AAE6A0A40 ERROR libav :0:: no frame!
0:06:28.870193300 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:1954:gst_ffmpegviddec_handle_frame:<video_decoder> Failed to send data for decoding
0:06:28.881774900 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:948:gst_ffmpegviddec_get_buffer2:<video_decoder> Couldn't get codec frame !
0:06:28.938859700 26852 0000026AAE6A0A40 ERROR libav :0:: get_buffer() failed
0:06:28.957474000 26852 0000026AAE6A0A40 ERROR libav :0:: thread_get_buffer() failed
0:06:29.029450700 26852 0000026AAE6A0A40 ERROR libav :0:: decode_slice_header error
0:06:29.033843500 26852 0000026AAE6A0A40 ERROR libav :0:: no frame!
0:06:29.041696500 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:1954:gst_ffmpegviddec_handle_frame:<video_decoder> Failed to send data for decoding
0:06:29.127294900 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:948:gst_ffmpegviddec_get_buffer2:<video_decoder> Couldn't get codec frame !
0:06:29.147238900 26852 0000026AAE6A0A40 ERROR libav :0:: get_buffer() failed
0:06:29.151839200 26852 0000026AAE6A0A40 ERROR libav :0:: thread_get_buffer() failed
0:06:29.170947200 26852 0000026AAE6A0A40 ERROR libav :0:: decode_slice_header error
0:06:29.174017100 26852 0000026AAE6A0A40 ERROR libav :0:: no frame!
0:06:29.224844000 26852 0000026AAE6A0A40 WARN libav gstavviddec.c:1954:gst_ffmpegviddec_handle_frame:<video_decoder> Failed to send data for decoding

We are having queries on configuring “Azure SDK Service principle” and provide contributor role access to it.

We are using cross Tenant deployment

  1. Office Tenant (Microsoft 365 E5 Developer): Create app-registration and manage permission also share client ID to Hosting Tenant(xyz Company) through Bot channel registration
  2. We host MS Bot code in Hosting Tenant (xyz Company),
    The following services are also part of Hosting Tenant (xyz Company),
    • Virtual Machine with the installation of Gstreamer, Ngnix, etc.
    • Certificate installation
    • Event Grid
    • Cosmos DB
    • Azure AppService
    • Azure function
    • Self-hosted Service(Bot Service)

We are having queries on configuring “Azure SDK Service principle” and providing contributor access to it. Currently, we are blocked on this step. please follow the below article to configure the azure SDK service principal.
https://github.com/microsoft/Broadcast-Development-Kit/blob/main/docs/how-to-run-the-solution-in-azure/azure_sdk_service_principal.md

Query: In our scenario (Cross-tenant), how could we provide contributor access to service principle (Office 365 Tenant) inside xyz company Dev tenant? The below image also depicts the same.

image

while exploring online, we found the following help. But, we are not sure how much it'll help.
https://stackoverflow.com/questions/69314550/give-access-to-service-principal-which-is-in-another-azure-tenant
stackoverflow.com/questions/65696539/how-to-create-a-multi-tenant-service-principal-in-azure-using-terraform
Need your help on this.

Joining a Call (Establishing) takes forever

I am following instructions from this document. When I click on the Join a Call, the status changes to "Establishing" that never (at least 20 minutes) ends.

I set up my meeting so Everyone bypasses, but this didn't change anything. Please let me know what would be the best way to investigate.

Here is the log:

$>2021-09-12T22:45:16.9391397Z Info: GraphAuthClient.cs:153 SendHttpRequestAsync
ScenarioId: ***
AppId: ***
AppName: BotService
TransactionDirection: Outgoing
TraceType: HttpResponse
ResponseTime: 349
request: POST https://graph.microsoft.com/beta/communications/calls
response: 201 Created
headers:
Transfer-Encoding: chunked
Strict-Transport-Security: max-age=31536000
request-id: 2ee14854-f27e-46ec-8e80-bd0a10c420e2
client-request-id: ***
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"West US 2","Slice":"E","Ring":"1","ScaleUnit":"000","RoleInstance":"CO1PEPF00000107"}}
scenario-id: ***
OData-Version: 4.0
Date: Sun, 12 Sep 2021 22:45:14 GMT
Location: https://graph.microsoft.com/beta/communications/calls/***
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8
{
"@odata.type": "#microsoft.graph.call",
"state": "establishing",
"direction": "outgoing",
"callbackUri": "https://.ngrok.io/api/bot/calling",
"callRoutes": [],
"source": {
"@odata.type": "#microsoft.graph.participantInfo",
"identity": {
"@odata.type": "#microsoft.graph.identitySet",
"application": {
"@odata.type": "#microsoft.graph.identity",
"displayName": "(Identity: 5Rajcp60)",
"id": "
"
},
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"applicationInstance": null
},
"platformId": null
},
"targets": [],
"requestedModalities": [
"audio",
"video",
"videoBasedScreenSharing"
],
"mediaConfig": {
"@odata.type": "#microsoft.graph.appHostedMediaConfig",
"blob": "{"mpUri":"net.tcp://4..com:xxxxx/MediaProcessor","audioRenderContexts":[""],"videoRenderContexts":[""}",
"removeFromDefaultAudioGroup": null
},
"chatInfo": {
"@odata.type": "#microsoft.graph.chatInfo",
"threadId": "19:meeting_
.v2",
"messageId": "0",
"replyChainMessageId": "0"
},
"callOptions": {
"@odata.type": "#microsoft.graph.outgoingCallOptions",
"allowGuestToBypassLobby": null
},
"meetingInfo": {
"@odata.type": "#microsoft.graph.organizerMeetingInfo",
"organizer": {
"@odata.type": "#microsoft.graph.identitySet",
"user": {
"@odata.type": "#microsoft.graph.identity",
"id": "",
"tenantId": "
"
},
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"applicationInstance": null
},
"allowConversationWithoutHost": null,
"lobbyBypass": null,
"organizerInfo": null
},
"tenantId": "",
"myParticipantId": "
",
"callChainId": "",
"id": "
",
"@odata.context": "https://graph.microsoft.com/beta/$metadata#communications/calls/$entity",
"transferState": null,
"terminationReason": null,
"ringingTimeoutInSeconds": null,
"activeModalities": [],
"routingPolicies": [],
"answeredBy": null,
"transcription": null,
"meetingCapability": null,
"breakoutDetails": null,
"pstnDetails": null,
"terminationSender": null
}
$>2021-09-12T22:45:14.7430544Z Info: GraphAuthClient.cs:100 SendHttpRequestAsync
ScenarioId: ***
AppId: ***
AppName: BotService
TransactionDirection: Outgoing
TraceType: HttpRequest
request: POST https://graph.microsoft.com/beta/communications/calls
headers:
Scenario-Id: ***
Client-Request-Id: ***
User-Agent: GraphCommunicationsClient-BotService/1.2.0.850
Authorization: (redacted)
Content-Type: application/json; charset=utf-8
{
"@odata.type": "#microsoft.graph.call",
"direction": "outgoing",
"callbackUri": "https://.ngrok.io/api/bot/calling",
"source": {
"@odata.type": "#microsoft.graph.participantInfo",
"identity": {
"@odata.type": "#microsoft.graph.identitySet",
"application": {
"@odata.type": "#microsoft.graph.identity",
"displayName": "(Identity: 5Rajcp60)",
"id": "
"
}
}
},
"requestedModalities": [
"audio",
"video",
"videoBasedScreenSharing"
],
"mediaConfig": {
"@odata.type": "#microsoft.graph.appHostedMediaConfig",
"blob": "{"mpUri":"net.tcp://4..com:15185/MediaProcessor","audioRenderContexts":[""],"videoRenderContexts"""}"
},
"chatInfo": {
"@odata.type": "#microsoft.graph.chatInfo",
"threadId": "19:meeting_
.v2",
"messageId": "0",
"replyChainMessageId": "0"
},
"meetingInfo": {
"@odata.type": "#microsoft.graph.organizerMeetingInfo",
"organizer": {
"@odata.type": "#microsoft.graph.identitySet",
"user": {
"@odata.type": "#microsoft.graph.identity",
"id": "",
"tenantId": "
"
}
}
},
"tenantId": "***",
"callOptions": {
"@odata.type": "#microsoft.graph.outgoingCallOptions",
"allowGuestToBypassLobby": null
}
}

Unable to play rtmp stream output from a local run.

Hellow Team, I have set up the solution to run locally, but if I try to play it using VLC, Vimeo or somenthing else I get an error
Your input can't be opened:
VLC is unable to open the MRL 'rtmp://8564-2806-102e-1e-4697-bf-f066-d050-5bcb.ngrok.io:1940/extraction/VJ590ryt0WrdZvxSTXvg?callId=0c9db8e5-2435-4cc1-9333-da833f41749c'. Check the log for details.
can you share a little more on how to play the rtmp output locally? just tried in VLC media> open network>paste the url and tried to play it.

RTMP injection is failing when creating the Pipeline

I have started the process and I have joined the bot and RTMP out the Stream but when I am trying to inject Video the pipeline seems to have some issues.

0:02:18.930049600 32032 0000027F3CA19090 INFO GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "audiobuffersplit"
0:02:18.932883800 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstAudioBufferSplit@0000027F50A61B60 adding pad 'sink'
0:02:18.934756400 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstAudioBufferSplit@0000027F50A61B60 adding pad 'src'
0:02:19.012201300 32032 0000027F3CA19090 INFO GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "capsfilter"
0:02:19.018819900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstBaseTransform@0000027F4E675B60 adding pad 'sink'
0:02:19.022251300 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstBaseTransform@0000027F4E675B60 adding pad 'src'
0:02:19.026013700 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.028988700 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:1010:gst_element_get_static_pad: found pad queue1:sink
0:02:19.030137500 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link sink:proxypad3 and queue1:sink
0:02:19.031030000 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked sink:proxypad3 and queue1:sink, successful
0:02:19.031991000 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.033165200 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:1010:gst_element_get_static_pad: found pad capsfilter1:src
0:02:19.034365200 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link capsfilter1:src and src:proxypad4
0:02:19.035594000 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked capsfilter1:src and src:proxypad4, successful
0:02:19.037290500 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.038918100 32032 0000027F3CA19090 INFO GST_EVENT gstpad.c:5904:gst_pad_send_event_unchecked:capsfilter1:src Received event on flushing pad. Discarding
0:02:19.045035300 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad: adding pad 'src'
0:02:19.046642700 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad: adding pad 'sink'
0:02:19.048282900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstutils.c:1819:gst_element_link_pads_full: trying to link element queue1:(any) to element audioconvert0:(any)
0:02:19.049062600 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1080:gst_pad_check_link: trying to link queue1:src and audioconvert0:sink
0:02:19.049750200 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:AudioProcessingBin:sink pad has no peer
0:02:19.050813300 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:audioconvert0:src pad has no peer
0:02:19.051715800 32032 0000027F3CA19090 INFO structure gststructure.c:2842:gst_structure_get_valist: Expected field 'channel-mask' in structure: audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ];
0:02:19.052455400 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1633:prepare_link_maybe_ghosting: queue1 and audioconvert0 in same bin, no need for ghost pads
0:02:19.053562000 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link queue1:src and audioconvert0:sink
0:02:19.054705400 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:AudioProcessingBin:sink pad has no peer
0:02:19.063297800 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:audioconvert0:src pad has no peer
0:02:19.066395400 32032 0000027F3CA19090 INFO structure gststructure.c:2842:gst_structure_get_valist: Expected field 'channel-mask' in structure: audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ];
0:02:19.068054100 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked queue1:src and audioconvert0:sink, successful
0:02:19.069904500 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.075689800 32032 0000027F3CA19090 INFO GST_EVENT gstpad.c:5904:gst_pad_send_event_unchecked:queue1:src Received event on flushing pad. Discarding
0:02:19.077527900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstutils.c:1819:gst_element_link_pads_full: trying to link element audioconvert0:(any) to element audioresample0:(any)
0:02:19.078412500 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1080:gst_pad_check_link: trying to link audioconvert0:src and audioresample0:sink
0:02:19.079397700 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:AudioProcessingBin:sink pad has no peer
0:02:19.080727000 32032 0000027F3CA19090 INFO structure gststructure.c:2842:gst_structure_get_valist: Expected field 'channel-mask' in structure: audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ];
0:02:19.081483200 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:audioresample0:src pad has no peer
0:02:19.082657100 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1633:prepare_link_maybe_ghosting: audioconvert0 and audioresample0 in same bin, no need for ghost pads
0:02:19.083391600 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link audioconvert0:src and audioresample0:sink
0:02:19.084096200 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:AudioProcessingBin:sink pad has no peer
0:02:19.085011300 32032 0000027F3CA19090 INFO structure gststructure.c:2842:gst_structure_get_valist: Expected field 'channel-mask' in structure: audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ];
0:02:19.085767700 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:audioresample0:src pad has no peer
0:02:19.095641000 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked audioconvert0:src and audioresample0:sink, successful
0:02:19.096984900 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.098403000 32032 0000027F3CA19090 INFO GST_EVENT gstpad.c:5904:gst_pad_send_event_unchecked:audioconvert0:src Received event on flushing pad. Discarding
0:02:19.100635900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstutils.c:1819:gst_element_link_pads_full: trying to link element audioresample0:(any) to element audiobuffersplit0:(any)
0:02:19.101638500 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1080:gst_pad_check_link: trying to link audioresample0:src and audiobuffersplit0:sink
0:02:19.103184400 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:audiobuffersplit0:src pad has no peer
0:02:19.110206300 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1633:prepare_link_maybe_ghosting: audioresample0 and audiobuffersplit0 in same bin, no need for ghost pads
0:02:19.111303900 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link audioresample0:src and audiobuffersplit0:sink
0:02:19.112539200 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:audiobuffersplit0:src pad has no peer
0:02:19.115114600 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked audioresample0:src and audiobuffersplit0:sink, successful
0:02:19.116588900 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.117711400 32032 0000027F3CA19090 INFO GST_EVENT gstpad.c:5904:gst_pad_send_event_unchecked:audioresample0:src Received event on flushing pad. Discarding
0:02:19.125423900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstutils.c:1819:gst_element_link_pads_full: trying to link element audiobuffersplit0:(any) to element capsfilter1:(any)
0:02:19.127870800 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1080:gst_pad_check_link: trying to link audiobuffersplit0:src and capsfilter1:sink
0:02:19.129834100 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:AudioProcessingBin:src pad has no peer
0:02:19.132111300 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1633:prepare_link_maybe_ghosting: audiobuffersplit0 and capsfilter1 in same bin, no need for ghost pads
0:02:19.133597700 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link audiobuffersplit0:src and capsfilter1:sink
0:02:19.137876400 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:4314:gst_pad_peer_query:AudioProcessingBin:src pad has no peer
0:02:19.139940000 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked audiobuffersplit0:src and capsfilter1:sink, successful
0:02:19.141207300 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.143012300 32032 0000027F3CA19090 INFO GST_EVENT gstpad.c:5904:gst_pad_send_event_unchecked:audiobuffersplit0:src Received event on flushing pad. Discarding
0:02:19.277138300 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstBaseSink@0000027F508C9840 adding pad 'sink'
0:02:19.314547600 32032 0000027F3CA19090 INFO GST_PLUGIN_LOADING gstplugin.c:915:_priv_gst_plugin_load_file_for_registry: plugin "C:\gstreamer\1.0\mingw_x86_64\lib\gstreamer-1.0\libgstapp.dll" loaded
0:02:19.318101900 32032 0000027F3CA19090 INFO GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "appsink" named "audioappsink"
0:02:19.323016500 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstBaseSink@0000027F508C4680 adding pad 'sink'
0:02:19.330545000 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3345:gst_element_dispose: 0000027F508C9840 dispose
0:02:19.331795900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:869:gst_element_remove_pad: removing pad 'sink'
0:02:19.340497900 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3392:gst_element_dispose: 0000027F508C9840 parent class dispose
0:02:19.342286200 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3423:gst_element_finalize: 0000027F508C9840 finalize
0:02:19.343873200 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3429:gst_element_finalize: 0000027F508C9840 finalize parent
0:02:19.346107900 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstBaseSink@0000027F508C8AA0 adding pad 'sink'
0:02:19.347186500 32032 0000027F3CA19090 INFO GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "appsink" named "videoappsink"
0:02:19.348594700 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:753:gst_element_add_pad:GstBaseSink@0000027F508C4D50 adding pad 'sink'
0:02:19.353122100 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3345:gst_element_dispose: 0000027F508C8AA0 dispose
0:02:19.356953300 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstelement.c:869:gst_element_remove_pad: removing pad 'sink'
0:02:19.358392200 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3392:gst_element_dispose: 0000027F508C8AA0 parent class dispose
0:02:19.359816400 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3423:gst_element_finalize: 0000027F508C8AA0 finalize
0:02:19.360933000 32032 0000027F3CA19090 INFO GST_REFCOUNTING gstelement.c:3429:gst_element_finalize: 0000027F508C8AA0 finalize parent
0:02:19.362643100 32032 0000027F3CA19090 INFO GST_ELEMENT_PADS gstutils.c:1819:gst_element_link_pads_full: trying to link element rtmpsrc0:(any) to element decodebin0:(any)
0:02:19.363735400 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1080:gst_pad_check_link: trying to link rtmpsrc0:src and decodebin0:sink
0:02:19.369273500 32032 0000027F3CA19090 INFO GST_PADS gstutils.c:1633:prepare_link_maybe_ghosting: rtmpsrc0 and decodebin0 in same bin, no need for ghost pads
0:02:19.370740800 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2383:gst_pad_link_prepare: trying to link rtmpsrc0:src and decodebin0:sink
0:02:19.372262400 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:2591:gst_pad_link_full: linked rtmpsrc0:src and decodebin0:sink, successful
0:02:19.373611900 32032 0000027F3CA19090 INFO GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event
0:02:19.375244600 32032 0000027F3CA19090 INFO GST_EVENT gstpad.c:5904:gst_pad_send_event_unchecked:rtmpsrc0:src Received event on flushing pad. Discarding
0:02:19.381802400 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current NULL pending VOID_PENDING, desired next READY
0:02:19.385936800 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current NULL pending VOID_PENDING, desired next READY
0:02:19.389963500 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to READY
0:02:19.391870300 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed: notifying about state-changed NULL to READY (VOID_PENDING pending)
0:02:19.419827800 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2980:gst_bin_change_state_func: child 'typefind' changed state to 2(READY) successfully
0:02:19.423480300 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to READY
0:02:19.426346100 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed: notifying about state-changed NULL to READY (VOID_PENDING pending)
0:02:19.429855700 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2980:gst_bin_change_state_func:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> child 'decodebin0' changed state to 2(READY) successfully
0:02:19.432723100 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current NULL pending VOID_PENDING, desired next READY
0:02:19.434029000 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to READY
0:02:19.435335600 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed: notifying about state-changed NULL to READY (VOID_PENDING pending)
0:02:19.438022700 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2980:gst_bin_change_state_func:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> child 'rtmpsrc0' changed state to 2(READY) successfully
0:02:19.439451500 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2745:gst_element_continue_state:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> committing state from NULL to READY, pending PLAYING, next PAUSED
0:02:19.440870600 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> notifying about state-changed NULL to READY (PLAYING pending)
[00:35:41 INF] [Injection Pipeline] Call Id: df2e1439-98d6-487a-9cdd-37e1b3a8b556, Stream Id: cad1e302-6a5b-4559-903e-38986f035a36, Type of message: StateChanged, State changed message from: pipeline_cad1e302-6a5b-4559-903e-38986f035a36, Current state: Ready
0:02:19.464850500 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2752:gst_element_continue_state:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> continue state change READY to PAUSED, final PLAYING
0:02:19.465800700 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current READY pending VOID_PENDING, desired next PAUSED
0:02:19.466687000 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current READY pending VOID_PENDING, desired next PAUSED
0:02:19.467399500 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to PAUSED
0:02:19.468781700 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed: notifying about state-changed READY to PAUSED (VOID_PENDING pending)
0:02:19.470361300 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2980:gst_bin_change_state_func: child 'typefind' changed state to 3(PAUSED) successfully
0:02:19.471641900 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2986:gst_bin_change_state_func:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> child 'decodebin0' is changing state asynchronously to PAUSED
0:02:19.473353400 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current READY pending VOID_PENDING, desired next PAUSED
0:02:19.506862600 32032 0000027F3CA19090 INFO rtmpsrc gstrtmpsrc.c:599:gst_rtmp_src_connect: seekable 1
0:02:21.546704900 32032 0000027F3CA19090 ERROR rtmp :0:: RTMP_Connect0, failed to connect socket. 10061 (Unknown error)
0:02:21.550169500 32032 0000027F3CA19090 WARN rtmpsrc gstrtmpsrc.c:605:gst_rtmp_src_connect: error: Could not connect to RTMP stream "rtmp://localhost:1936/ingest/iAGTGTkMUy3BBKDYElyWw" for reading
0:02:21.554916100 32032 0000027F3CA19090 INFO GST_ERROR_SYSTEM gstelement.c:2235:gst_element_message_full_with_details: posting message: Could not open resource for reading.
[00:35:44 ERR] [Injection Pipeline] Call Id: df2e1439-98d6-487a-9cdd-37e1b3a8b556, Stream Id: cad1e302-6a5b-4559-903e-38986f035a36, Type of message: Error, Error received from element rtmpsrc0: Could not open resource for reading., Debugging information ../ext/rtmp/gstrtmpsrc.c(605): gst_rtmp_src_connect (): /GstPipeline:pipeline_cad1e302-6a5b-4559-903e-38986f035a36/GstRTMPSrc:rtmpsrc0:
Could not connect to RTMP stream "rtmp://localhost:1936/ingest/iAGTGTkMUy3BBKDYElyWw" for reading
0:02:21.587313500 32032 0000027F3CA19090 INFO GST_ERROR_SYSTEM gstelement.c:2262:gst_element_message_full_with_details: posted error message: Could not open resource for reading.
0:02:21.589806500 32032 0000027F3CA19090 WARN basesrc gstbasesrc.c:3557:gst_base_src_start: error: Failed to start
0:02:21.592182600 32032 0000027F3CA19090 INFO GST_ERROR_SYSTEM gstelement.c:2235:gst_element_message_full_with_details: posting message: GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure.
[00:35:44 ERR] [Injection Pipeline] Call Id: df2e1439-98d6-487a-9cdd-37e1b3a8b556, Stream Id: cad1e302-6a5b-4559-903e-38986f035a36, Type of message: Error, Error received from element rtmpsrc0: GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure., Debugging information ../libs/gst/base/gstbasesrc.c(3557): gst_base_src_start (): /GstPipeline:pipeline_cad1e302-6a5b-4559-903e-38986f035a36/GstRTMPSrc:rtmpsrc0:
Failed to start
0:02:21.605628200 32032 0000027F3CA19090 INFO GST_ERROR_SYSTEM gstelement.c:2262:gst_element_message_full_with_details: posted error message: GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure.
0:02:21.606849600 32032 0000027F3CA19090 WARN basesrc gstbasesrc.c:3912:gst_base_src_activate_push: Failed to start in push mode
0:02:21.614171000 32032 0000027F3CA19090 INFO GST_PADS gstpad.c:1276:activate_mode_internal:rtmpsrc0:src failed to activate in push mode
0:02:21.616417900 32032 0000027F3CA19090 WARN GST_PADS gstpad.c:1141:gst_pad_set_active:rtmpsrc0:src Failed to activate pad
0:02:21.617200600 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:3055:gst_element_change_state: have FAILURE change_state return
0:02:21.618149300 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2643:gst_element_abort_state: aborting state from READY to PAUSED
0:02:21.619052200 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2996:gst_bin_change_state_func:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> child 'rtmpsrc0' failed to go to state 3(PAUSED)
0:02:21.620281100 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2532:gst_bin_element_set_state: current PAUSED pending VOID_PENDING, desired next READY
0:02:21.621329600 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2486:gst_element_get_state_func: waiting for element to commit state
0:02:21.623186400 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2500:gst_element_get_state_func: timed out
0:02:21.630088400 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to READY
0:02:21.631892400 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed: notifying about state-changed PAUSED to READY (VOID_PENDING pending)
0:02:21.633416200 32032 0000027F3CA19090 INFO GST_STATES gstbin.c:2980:gst_bin_change_state_func: child 'typefind' changed state to 2(READY) successfully
0:02:21.635342300 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to READY
0:02:21.637104600 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2673:_priv_gst_element_state_changed: notifying about state-changed READY to READY (VOID_PENDING pending)
0:02:21.643410400 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:2770:gst_element_continue_state: completed state change to READY
0:02:21.645400100 32032 0000027F3CA19090 INFO pipeline gstpipeline.c:530:gst_pipeline_change_state:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> pipeline is not live
0:02:21.647297000 32032 0000027F3CA19090 INFO GST_STATES gstelement.c:3055:gst_element_change_state:<pipeline_cad1e302-6a5b-4559-903e-38986f035a36> have FAILURE change_state return
[00:35:44 INF] [Media Injection] Started injection
[00:35:44 INF] Executed action method BotService.Controllers.BotController.StartInjectionAsync (BotService), returned result Microsoft.AspNetCore.Mvc.OkObjectResult in 4769.6978ms.
[00:35:44 INF] Executing ObjectResult, writing value of type 'Application.Stream.Commands.StartInjection+StartInjectionCommandResponse'.
[00:35:44 INF] Executed action BotService.Controllers.BotController.StartInjectionAsync (BotService) in 4835.9971ms
[00:35:44 INF] Request finished in 4885.2292ms 200 application/json; charset=utf-8

I have installed GStreamer MinGCW and MSCV files but seems the pipeline is never starting correctly.

How to add a DNS record pointing to ngrok's TCP Url.

Have a question regarding adding a DNS record pointing to ngrok's TCP Url.

This document mentions that I have to add a DNS record pointing to ngrok's TCP Url while providing serviceFqdn.

Could you please explain how this should be done or point me to the right documentation?

Should I create a DNS zone in Azure and add a record pointing my domain to tcp.ngrok.io?

'There is no service configured with virtual machine <name> registered' error when starting botService.exe

I've completed the configuration and installation of version 0.5.0-dev on azure, but get the error below when starting the bot service. Note that the value of {{virtualMachineName}} at settings.BotConfiguration.virtualMachineName in environment.json is not included in the specification table at https://github.com/microsoft/Broadcast-Development-Kit/blob/c6867f75d6c655fbf09416411076b171a8ab43a4/docs/how-to-run-the-solution-in-azure/storage_account.md#placeholder-specification-table. I have tried using the cname, azure VM name, the actual computername and get the same error. What should the value be for this setting, and can you provide any other insight into this error?

Thank you.

C:\BotService-0.5.0-dev>BotService.exe --console
Is a Service False
[20:00:26 INF] Setting up database schema
[20:00:26 INF] Registering bot service
[20:00:26 INF] Instantiating CommunicationsClientBuilder for BotService
[20:00:26 INF] Instantiating AuthenticationProvider for BotService
[20:00:26 INF] Setting AuthenticationProvider for BotService
[20:00:26 INF] Setting NotificationUrl for BotService
[20:00:26 INF] Getting MediaPlatformSettings for BotService
[20:00:26 INF] Setting MediaPlatformSettings for BotService
[20:00:29 INF] Setting ServiceBaseUrl for BotService
[20:00:29 INF] Building Communication Client for BotService
[20:00:29 INF] Communication Client for BotService has been succesfully built
[20:00:30 ERR] [Bot Service API] There is no service configured with virtual machine teamsvideobroadcastvm registered

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> Domain.Exceptions.EntityNotFoundException: [Bot Service API]There is no service configured with virtual machine teamsvideobroadcastvm registered
   at Application.Service.Commands.RegisterService.RegisterServiceCommandHandler.<Handle>d__3.MoveNext() in D:\Source\ms\Broadcast-Development-Kit\src\Application\Service\Commands\RegisterService.cs:line 68
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Application.Common.ValidationBehaviour`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.<Handle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at BotService.Infrastructure.Services.MediatorService.<RegisterServiceAsync>d__8.MoveNext() in D:\Source\ms\Broadcast-Development-Kit\src\BotService\Infrastructure\Services\MediatorService.cs:line 124
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at BotService.Infrastructure.Core.Bot.<RegisterServiceAsync>d__21.MoveNext() in D:\Source\ms\Broadcast-Development-Kit\src\BotService\Infrastructure\Core\Bot.cs:line 108
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at BotService.Infrastructure.Extensions.WebHostServiceExtensions.RegisterBotService(IWebHost host) in D:\Source\ms\Broadcast-Development-Kit\src\BotService\Infrastructure\Extensions\WebHostServiceExtensions.cs:line 40
   at BotService.Program.<Main>d__11.MoveNext() in D:\Source\ms\Broadcast-Development-Kit\src\BotService\Program.cs:line 68
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at BotService.Program.<Main>(String[] args)

No audio/Source with device.api property equals wasapi found

I have been following the guide and have launched a VM in Azure, when I run gst-device-monitor-1.0 my output has no audio device with the device.api property equals wasapi Please find below the output of the command. Is this to be expected for a VM? What should my audio source be in that case?

C:\Users\botAdmin>gst-device-monitor-1.0
Probing devices...

Device found:

    name  : Generic PnP Monitor
    class : Source/Monitor
    caps  : video/x-raw(memory:D3D11Memory), format=BGRA, width=1320, height=692, framerate=[ 0/1, 2147483647/1 ]
            video/x-raw, format=BGRA, width=1320, height=692, framerate=[ 0/1, 2147483647/1 ]
    properties:
            device.api = d3d11
            device.name = \\.\DISPLAY1
            device.path = \\?\DISPLAY#Default_Monitor#1&1f0c3c2f&0&UID256#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
            device.primary = true
            device.type = unknown
            device.hmonitor = 65537
            device.adapter.luid = 18819
            device.adapter.description = Microsoft Basic Render Driver
            desktop.coordinates.left = 0
            desktop.coordinates.top = 0
            desktop.coordinates.right = 1320
            desktop.coordinates.bottom = 692
            display.coordinates.left = 0
            display.coordinates.top = 0
            display.coordinates.right = 1320
            display.coordinates.bottom = 692
    gst-launch-1.0 d3d11screencapturesrc monitor-handle=65537 ! ...

Device found:

    name  : Primary Sound Driver
    class : Audio/Sink
    caps  : audio/x-raw, format=S16LE, layout=interleaved, rate=[ 1, 2147483647 ], channels=[ 1, 2 ]
            audio/x-raw, format=U8, layout=interleaved, rate=[ 1, 2147483647 ], channels=[ 1, 2 ]
            audio/x-ac3, framed=true
            audio/x-dts, framed=true
    properties:
            device.api = directsound
            device.guid = (NULL)
            directsound.device.driver =
            directsound.device.description = Primary Sound Driver
    gst-launch-1.0 ... ! directsoundsink

Device found:

    name  : Primary Sound Capture Driver
    class : Audio/Source
    caps  : audio/x-raw, format={ (string)S16LE, (string)S8 }, layout=interleaved, rate=[ 1, 2147483647 ], channels=[ 1, 2 ]
    properties:
            device.api = directsound
            device.guid = (NULL)
            directsound.device.driver =
            directsound.device.description = Primary Sound Capture Driver
    gst-launch-1.0 directsoundsrc ! ...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.