当前位置: 首页 > 知识库问答 >
问题:

通过rtp流发送Android h264捕获

段兴为
2023-03-14

我正在为android编写一个rtp视频流,它从android本地套接字读取h264编码的数据并将其打包。问题是我做到了,但我在客户端(Voip)中不断收到黑帧。

通信方式如下:Android-

有几件事我还不明白:

1) Android的mediarecorder给了我一个原始的h264流,我怎么知道NAL何时根据该流开始/结束?它没有任何0x000001模式,但它有一个0x0000(我假设它是一个分隔符)

编辑:

添加更多信息。这是对输入缓冲区的2次(第一次、第二次)不同读取(按顺序)。如果我没弄错,前4个字节应用于获取NALU长度,第5个字节(索引4)是NALU标头。

我将在此处复制字节值,以备将来使用:

1) 0 0 12 114 101 -72 4 25 -15 -1 -121 -53 .....

   length = (114&0xFF) + (12&0xFF)*256 + (0&0xFF)
   length -> 3186

   forbidden = 101 & 0x80
   forbidden -> 0

   nri = 101 & 0x60
   nri -> 96

   nal_unit_type = 101 & 0x1F
   nal_unit_type -> 5


2) 0 0 1 -93 97 -32 32 103 -14 93 -1 .... 

   length = (-93&0xFF) + (1&0xFF)*256 + (0&0xFF)
   length -> 419

   forbidden = 97 & 0x80
   forbidden -> 0

   nri = 97 & 0x60
   nri -> 96

   nal_unit_type = 97 & 0x1F
   nal_unit_type -> 1

这是正确的吗?

2) 如何从该流中获取NALu时间戳及其长度?

3) 出于某种原因,正在标记数据包(即使在我取消设置标记时)。(以防检查pcap文件)[修复:我没有对每个数据包使用相同的SSCR]

这里有一个来自asterisk的流的pcap捕获(它来自Android)。Android设备是带有Android IC的华硕Transform Prime。

我正在发送sdp中的打包模式(1)和配置文件级别id(42801e),我还尝试发送sprops(sps:Z0KAHpWgUHxA,psp:aM48gA==)参数,但没有更改。

干杯


共有1个答案

丘友樵
2023-03-14

>

时间戳是RTP头的一部分。NAL单元的长度同样取决于打包模式。

你所说的标记是什么意思?您的意思是设置了RTP标记位吗?如果是,则必须再次遵循RFC中规定的规则。

 类似资料:
  • 问题内容: 我正在构建一个Web应用程序,该服务器应从服务器 http://lscube.org/projects/feng 播放RTSP / RTP流。 HTML5视频/音频标签是否支持rtsp或rtp?如果没有,最简单的解决方案是什么?也许是VLC插件之类的东西。 问题答案: 从技术上讲“是” (但不是真的) HTML 5的标签与协议无关-不在乎。您将协议作为URL的一部分放在属性中。例如:

  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star

  • 我想在登录时向特定用户发送通知,我使用Firebase消息,我可以通过控制台发送通知,但我想使用发送到主题和request以Swift代码发送此通知。当我在postman中运行代码时,我无法实现http请求以发送通知。我有以下错误: 请求缺少身份验证密钥(FCM令牌)。请参阅FCM文档的“认证”部分,网址为https://firebase.google.com/docs/cloud-messagi

  • 我正在使用Delphi XE7。我有一个Android移动应用程序,接收推送通知。有时,我有十个或更多的顶栏推送图标通知。当用户只点击一个通知图标时,我想让所有通知显示到我的应用程序中。 我执行了下一个过程来捕获所有这些消息,但不起作用,因为它只捕获单击的推送消息。 有人能帮我解决这个问题吗? 问候,路易斯

  • 我在弄清楚如何使用gstreamer创建一个简单的rtp流并在vlc上显示它时遇到了一些困难。 我已经安装了GStreamer 0.10.30和VLC 1.1.3。我唯一的要求是使用MPEG4或H.264编解码器。 现在,我可以通过以下简单的管道传输GStreamer videotestsrc: 它输出客户端接收流所需的“上限”: 我还可以使用以下管道显示流: 但当我尝试用vlc接收流时: 我一无

  • 问题内容: 大家好,我正尝试通过websockets发送javascript对象: faye-websockets文档说: send(message) 接受字符串或缓冲区,并通过连接向另一对等方发送文本或二进制消息。 服务器端我正在使用node和faye。 客户端: 我的错误是什么?谢谢 问题答案: WebSockets支持发送和接收:字符串,类型数组(ArrayBuffer)和Blob。发送之前