- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试为我正在开发的应用构建我自己的客户端 RTMP 库。到目前为止,一切都非常成功,因为我能够连接到 RTMP 服务器协商握手,然后发送所有必要的数据包(FCPublish Publish ETC)然后从服务器我得到 NetStream.Publish.Start 的 onStatus 消息,这意味着我已经成功获得服务器,允许我开始发布我的直播视频广播。 Wireshark 还确认信息(/Data packetizing)是正确的,因为它也在那里正确显示。
现在我遇到麻烦的地方是 RTMP 分块,关闭 Adobe RTMP Specification第 17 和 18 页显示了消息如何分块的示例。从这个例子中我可以看到它是根据 block 大小(128 字节)分解的。对我来说, block 大小在初始连接和交换中协商,始终为 4096 字节。因此,当我交换大于 4096 字节的视频数据时,我需要将消息分块发送 RTMP packetHeader 与前 4096 字节的数据相结合,然后发送一个小的 RTMP header ,即 0xc4 (0xc0 | packetHeaderType (0x04))与 4096 字节的视频数据相结合,直到发送了 header 指定的完整数据包。然后一个新的框架进来并重复相同的过程。
通过检查其他用不同语言编写的 RTMP 客户端示例,这似乎是他们都在做的事情。不幸的是,我尝试流式传输到的摄取服务器没有接收到广播视频数据,它们不会关闭我的连接,它们只是从不显示视频或任何表明视频正确的迹象。 Wireshark 显示在发送视频原子数据包后,大多数发送的数据包都是未知 (0x0) 一点点,然后它们将切换到视频数据,并将在显示未知 (0x0) 和视频数据之间进行某种触发器。但是,如果我将有效负载的最大大小限制为 20000 字节,Wireshark 会将所有内容显示为视频数据。显然,在这种情况下,摄取服务器不会显示视频,因为我正在删除数据 block ,使其只有 20k 字节。
为了找出问题所在,我启动了另一个 xcode 项目,该项目允许我在我的局域网上欺骗一个 RTMP 服务器,这样我就可以看到来自 libRTMP IOS 的数据是什么样子的。当它进入服务器时。同样使用 libRTMP,我可以让它记录它发送的数据包,它们似乎注入(inject)字节 0xc4 甚至 128 字节,即使我已经将 Change Chunk size 消息作为服务器发送。当我尝试通过仅使用 128 block 大小在我的 RTMP 客户端库中复制它时,即使它已设置为 4096 字节,服务器也会关闭我对我的连接。但是,如果更改 libRTMP 以尝试转到实时 RTMP 服务器,它仍然会在 LibRTMP 中打印出它正在以 128 的 block 大小发送数据包。服务器似乎正在接受它,因为视频正在显示。当我查看进入我的 RTMP 服务器的数据时,我可以看到它们都是他们的。
有人知道会发生什么吗?
最佳答案
虽然我没有专门使用 RTMP,但我已经相当广泛地使用了 RTSP/RTP/RTCP,因此,根据我的经验和一路上遇到的挫折,这里有一些随机的、可能适用的技巧这可能会有所帮助/需要寻找的东西可能会导致问题:
祝你好运!
关于objective-c - RTMP 摄取 block 流的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40296074/
我需要从 RTMP 流中裁剪视频并将其发送到另一个总是变化的 RTMP 服务器。我的理解是我应该使用 nginx-proxy和 ffmpeg ,谁能帮我设置一下? 我想我需要将流发送到像 /strea
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
如何在gstreamer中混合两个rtmp流? Src: nginx-rtmp 摄像头 - h.264/speex接收器:nginx-rtmp GStreamer 0.10 或 1.0 ------
我正在尝试组合/合并两个 rtmp 流,然后将它们发布到另一个流 例如: ffmpeg -i rtmp://ip:1935/live/micMyStream7 -i rtmp://ip:1935/li
有什么方法可以拒绝用户在其他网站上播放我的流吗?我正在运行带 rtmp 模块的 nginx,ubuntu 13。这是我的 nginx.conf rtmp { server {
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
我正在开发一个使用 SoundManager2 的网络应用程序。在我的头撞到墙上并且没有让我的音乐流式传输之后,我终于在创建新的 SoundManager 声音时切换了一些 URL。 这是我之前使用的
谁能指导我做上面提到的? 基本上我想要的: 将单个视频文件流式传输到 RTMP 服务器(在我的情况下为 nginx)到链接的 python 脚本: rtmp:///stream/ 因此,理想情况下,视
我正在开发一个需要通过 rtmp 协议(protocol)进行实时广播流的 iphone 应用程序。我一直在努力寻找解决方案。我所知道的是我应该能够使用 rtmp-dump。但我是iphone dev
我正在尝试将传入的 rtmp 流保存在我的服务器上作为 mp4 文件。我正在使用 nginx-rtmp模块并从 flv 更改容器至mp4在 exec_record_done指示。这是使用 ffmpeg
这是我尝试运行的脚本,我相信问题出在这里: #!/bin/bash GIF=/home/stream1/85012216.gif STREAM_KEY=thisisasecret URL=rtmp:/
输出视频: https://youtu.be/VxfoBQjoY6E 解释: 我想:在 Opencv 中处理摄像头流并将其推送到 RTMP 服务器。我已经设置了 NGINX(RTMP 模块),并且已经
我正在尝试遵循本指南 - http://www.helping-squad.com/nginx-rtmp-compile-for-windows/ 为 Windows 编译 nginx rtmp,但是
我是这个论坛的新手,我的英语水平不是最好的! 我有一个网站,在那里我发布了摄像机的视频流,以显示在嵌套时间现场发生的事情!一个具有高 IT 技能的人为我构建了一个小服务器用于重新流 (Datarhei
我有一个闪存媒体服务器。我想在 Android 设备中创建一个实时视频聊天应用程序。 我目前正在使用 RTMP 方法来保护我的应用程序,但我不确定 RTMP 是否是保护我的应用程序的正确安全机制?你能
文件结束时如何保持流连接处于事件状态? 我正在使用 ffmpeg 4 我尝试了超时选项,但它不起作用,所以我的例子是: ffmpeg -i input.webm -timeout -f flv rtm
我有一台服务器,目前正在流出 RTMP 媒体,我需要以最小延迟(2-3 秒)播放它。 现在我正在使用 CRTMPServer 来使用流,但是由于没有不依赖 Flash 的 RTMP 播放器,因此该解决
我正在寻找一种解决方案,使用浏览器(Javascript)将笔记本电脑摄像头的数据发送到 rtmp 服务器(如 facebook live 或 youtube)。我做了研究,但没有运气。我得到了什么:
[已解决] -- 最终编辑中的解决方案 我正在使用 ffmpeg 录制 rtmp 直播,并希望添加一个标志,该标志将在新数据停止到达时自动停止处理。 如果我启动和停止脚本(通过按需终止进程来停止),一
我正在尝试从 ubuntu 启动实时(非点播)RTMP 流,但我仅使用 RTSP 成功通过 VLC 流式传输 vlc -vvv ./videos/test.mp4 --sout '#rtp{dst=1
我是一名优秀的程序员,十分优秀!