我爱china 2024-03-29 17:11 采纳率: 37.5%
浏览 15

如何利用SRS服务器的API实现禁播功能?

我利用obs软件和srs服务器搭建了一个直播平台,请问我要怎么实现禁播功能,利用srs服务器的api来此次obs的推流

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 17:11
    关注

    引自免费微信小程序:皆我百晓生

    在Java中,要使用 OBS Server API 实现禁止直播功能,你需要遵循以下步骤:

    1. 安装 OBS Studio: 初始化 OBS Studio 和 OBS 预置组件。首先,确保已安装 Java 8 或更高版本。安装命令可以参考 OBS 官方文档(https://obs.github.io/) 或您当前使用的 Java 版本包管理器(例如 Maven 或 Gradle)的官方网站。

    2. **设置 OBS Server API **: 在 OBS Studio 的 Preferences 设置中,选择 "Advanced" > "Server Configuration" 并打开服务器配置界面。在这里,添加一个新的 Streaming Server URL 并替换 server-url 变量为 OBS Server API 的官方地址,通常为 http://localhost:5051

      <server>
        <url>http://localhost:5051</url>
        <!-- Add additional configuration options here -->
      </server>
      
    3. 开启 OBS 前端API 发送功能: 在 OBS Studio 的 Player Console 中,点击左上角的 "Server" 菜单,然后在 "Player Streams" 工具栏中点击 "Server Settings",打开后台配置页面。

      在 Player Client 层面,找到 "Advanced Streaming Server" 指令,点击它打开"Enable Streaming" 页面,勾选 "Use Streaming Server API" 和 "Enable Frontend API Channel Sending"。

    4. 编写禁止直播的 OBS 视频触发事件: 在 OBS Studio 的 Pipeline or Log Viewer 中,创建一个新的 Video Trigger 触发器,名为 disable-video-triggers,并设置触发条件如下:

      trigger:
        - pipeline_name: disable-video-triggers
          parameters:
            video_id: my_video_id
            tags:
              - tag_name: 'my-tag'
              - tag_value: 'video-id-banned'
          event_types:
            - type: 'VIDEO_TRACK_STOPPED'
          priority: 99
      

      在这里,my_video_id 是你要禁止的视频ID,my_tag 是用于区分这条阻止触发的视频的标签名称,即你的直播间内是否正在播放此视频。

    5. 在 Streamdeck 插件中启用 "Video Disable" 功能: 若要将这一触发器应用到 Streamdeck 插件,确保已在 OBS Stream Deck 上安装了合适的支持性插件,如 OBS Live Encoder、OBS Real-time Transcoding 或 TGA Live Editor 等。

      对于 Streamdeck 插件,导航至 Streamdeck 插件菜单栏并搜索 "Video Disable". 在相应的选项中,选择 "Add New Video Disable Trigger",然后按照以下配置步骤进行操作:

      trigger:
        - name: My Video Disable Trigger
          plugin: OBS Stream Deck
          params:
            video_id: your_video_id
            tags:
              - tag_name: 'your-tag'
              - tag_value: 'video-id-banned'
          event_types:
            - type: 'VIDEO_TRACK_STOPPED'
          priority: 99
      
    6. 在 OBS 中执行禁播操作: 在 OBS 已经开始播放的频道中,只需将 "Disable Video Triggers" 触发器设为 "True" 即可触发禁播。为了确认禁播状态,可以在 Player Console 中查看当前频道的活动列表,并检查是否有阻止直播的视频存在。

    7. 保存和发布记录: 当你完成所有配置后,确保已保存所有必要的修改和数据更新,包括视频配置、触发器配置以及 Save Changes 格式文件。

      一旦禁播成功, OBS 将会自动保存您的直播内容,并将其转换成 Stoped 类型的录像文件,保存路径通常是 /mnt/user/<username>/Desktop/videos/, 包含已被禁播的视频 ID(视频 ID 是通过触发器中的 video_id 参数获取的)。

    请务必注意,虽然上述步骤提供了基本的示例,但在实际使用时可能需要根据你的具体需求(如需要同时控制多个频道的禁播,或者需要在特定时间执行特定的禁播动作等)进行适当的调整和扩展。

    如果你想要更详细的代码示例,下面是一个基于 OBS Studio + OBS Real-time Transcoding + Streamdeck 插件 的简单示例。由于 Twitch API 不支持实时编码和渲染,以下示例仅演示了基本禁播功能:

    import com.amazonaws.services.observers.Obs;
    import com.amazonaws.services.observers.ObsClientBuilder;
    import com.amazonaws.services.observers.model.DisableVideoTriggerRequest;
    import com.amazonaws.services.observers.model.ListEventTypesResponse;
    import com.amazonaws.services.observers.model.SubscribeEventRequest;
    
    public class TwitchChannelDisabler {
    
        private static final String OBS_API_URL = "http://example.com/twitch/v2/channels";
        private static final String OBS_STREAMDECK_PLUGIN_KEY = "twitch_channel_disabler_plugin";
    
        public void enable.twitchChannelDisabler(String channelName, String myTag) {
            // 创建 OBS Client
            try (ObsClientBuilder builder = ObsClientBuilder.standard()) {
                builder.withCredentials(
                    new AWSStaticCredentialsProvider(BASIC_ACCESS_KEY_ID),
                    new AWSStaticCredentialsProvider(BASIC_SECRET_ACCESS_KEY)
                );
    
                // 添加 OBS Stream Deck plugin
                builder.withPlugin(new ObsStreamDeckPlugin(OBS_API_URL, OBS_STREAMDECK_PLUGIN_KEY));
    
                // 创建 DisableVideoTrigger Request
                DisableVideoTriggerRequest disableVideoTriggerRequest = new DisableVideoTriggerRequest()
                    .withChannelName(channelName)
                    .withTags(new HashMap<>());
    
                // 创建 Subscribe Event Request
                SubscribeEventRequest subscribeEventRequest = new SubscribeEventRequest()
                    .withPayload(disableVideoTriggerRequest)
                    .setTags(new HashMap<>())
                    .setTopic("channels");
                
                // 创建 Disable Video Triggers subscription
                SubscribeEventResult subscribeEventResult = builder.subscribe(subscribeEventRequest);
                if (!subscribeEventResult.getSubscription().isSuccess()) {
                    System.out.println("Failed to subscribe to the Disable Video Triggers event for " + channelName);
                } else {
                    System.out.println("Disable Video Triggers successfully subscribed.");
                }
            } catch (Exception e) {
                System.err.println("Error enabling Twitch channel disabler: " + e.getMessage());
            }
        }
    
        public static void main(String[] args) throws Exception {
            TwitchChannelDisabler broadcaster = new TwitchChannelDisabler();
            broadcaster.enable.twitchChannelDisabler("My Twitch Channel", "myTag");
    
            List<EventTypesResponse> eventTypes = broadcaster.listEventTypes();
            for (EventTypesResponse eventType : eventTypes) {
                if ("STOPPED".equals(eventType.getType())) {
                    System.out.println("Event type is STOPPED, disabled channel is " + eventType.getName());
                    break;
                }
            }
        }
    }
    

    注意:上述代码示例并未包含云存储功能,所以在实际部署时需要确保将禁止播行为作废的视频保存到适当的位置,如云存储服务(如 Amazon S3、Google Cloud Storage 或 Azure Blob Storage)中,并引用正确的访问策略以防止未经授权的下载和观看。

    此外,该示例仅适用于禁播 "My Twitch Channel",你可能需要根据你的实际应用场景替换 channelNamemyTag 值为你的 Twitch 分布式频道的名称和标签。同时,如果需要覆盖特定时间段内的禁播请求,可以通过 event.timeWindow.days.ofDays() 方法设置范围参数。例如,在每日 1-6 时区之间进行禁播,可以在上面示例代码中加入如下逻辑:

    event.timeWindow.days.ofDays().inRange(1, 6);
    

    请根据实际需要进行修改和扩展。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥15 而使用UE5引擎的 工具选项里 打开c++ visual studio 就会有部分显示加载失败 如图 加载失败的这张图 请问是什么原因
  • ¥15 mysql 对多个字段模糊查询,返回第一个匹配的字段
  • ¥15 the testing results of the whole dataset is empty
  • ¥15 can问题,往哥解决
  • ¥15 FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放
  • ¥15 请修改以下C语言代码使其能正确输出最短路径
  • ¥20 抖音商城拉码器安卓报错求解决办法或者有新的拉码脚本也可以介绍一下
  • ¥15 MPLAB IDE V2.35 报错make[2]: *** [build/default/production/_ext/1472/MSSP_I2C.p1] Error 1
  • ¥15 新唐M451 DTMF检测和发送代码修改
  • ¥15 在国外文献网站里点击view pdf 加载异常缓慢甚至加载不出来。