通过 rtp 流发送 Android h264 捕获

2023-12-03

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

通信过程如下:Android -> Asterisk -> Jitsi (Osx)(以及反向)

有几件事我还没有理解:

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

EDIT:

添加更多信息。这些是 2 (first, second)输入缓冲区的不同读取(按顺序)。如果我猜对了,前 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文件)[FIXED:我没有对每个数据包使用相同的 SSCR]

这是一个pcap捕获来自星号(来自 Android)的流。 Android 设备是带有 Android ICS 的 Asus Transform Prime。

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

Cheers.


  1. 没有“android h264 流格式”。打包应该遵循RFC6184如果使用 RTP 作为传输协议。 RTP 有效负载格式中不存在起始代码。 RTP 数据包中包含的内容完全取决于打包模式,该模式指定 NAL 单元是否可以聚合、分段等。请阅读 RFC 部分打包模式了解更多信息。打包方式通常通过SDP进行通信。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 rtp 流发送 Android h264 捕获 的相关文章

  • 简单对话框中的 ViewPager

    我想在对话框中使用 ViewPager 但失败了 这是所有代码 对话框中显示两个片段 Layouts main xml
  • 获取 NullPointerException:尝试从字段“int android.view.View.mViewFlags”读取 - Android 动画

    我已经实现了一个动画 其中我在回收器视图中有图像视图 单击该项目时我想在回收器视图之外的图像视图上做一些动画 这样 我创建了一个新的图像视图 将其添加到主容器中 做了动画 最后我将它从主容器中取出 以下是回收器视图的点击项的代码 Code
  • 从SQLite列中获取所有数字字符串并进行总和计算

    我是 Android 和 SQLite 的新手 我在 SQLite 中有一个只有数字的 AMOUNT 列 我可以在 ListView 中显示它 但我无法找到任何我理解的方法来将它们全部添加并显示在 TextView 中 这是数据库助手 im
  • 您的手机中未安装应用程序

    我在模拟器中运行该应用程序 它成功运行 并且应用程序的图标显示在模拟器菜单中 但是当我尝试从模拟器菜单再次运行该应用程序时 它不允许我从中运行并显示 Toast 您的手机中未安装应用程序 在图像中 红色圆形是我的应用程序图标 如果您有您的M
  • 片段开始时显示用于编辑文本的键盘

    当我的片段开始时 我希望我的编辑文本成为焦点 让用户开始输入内容 我可以使用 requestFocus 将其聚焦 但无法显示键盘 我已经尝试过这两种方法 edit EditText view findViewById R id search
  • 小米设备正在停止前台服务

    我们有一个几乎永远运行的应用程序前台服务 同时使用系统托盘上的通知 这是正常的初始化 该应用程序仅依赖于此服务 在我们测试的每台设备上 即使任务被删除 服务也会继续运行 但在小米设备上 从最近的任务滑动后 它突然停止 然后再次启动 具体取决
  • 如何解决 FireBase 数据库 Key 中的禁止字符或解决方法

    我有这个 FireBase 数据库结构 我真的很想拥有像这个例子这样的密钥 US name United States PATH TO STREETS US California Orange County Orange 3138 E Ma
  • 实施材质主题时遇到问题

    我在用this http antonioleiva com material design everywhere 作为在 Android 5 0 之前的设备上向现有应用程序实施 Material 主题的教程 我的问题是我得到了Null Po
  • 如何以编程方式启用小米应用程序的自动启动

    我想知道小米是否可以提供任何应用程序的后台服务 我的应用程序中有需要始终在后台运行的服务 在除小米之外的所有设备中都工作正常 如何以编程方式完成 也适用于小米 oppo vivo 和 oneplus 手机 try Intent intent
  • 长按 HOME 按钮菜单隐藏 Android 应用程序

    我想从 且仅从 完成后长时间按住 HOME 按钮时出现的菜单中隐藏我的 Android 应用程序 有没有办法做到这一点 以编程方式调用 finish 并不能解决问题 有很多关于从启动器和任务管理器隐藏应用程序的线程 但这不是我想要的 我只是
  • SQLiteConstraintException:错误代码19:约束失败——Android错误

    我已经看到了一些与此相关的其他问题 但没有一个答案似乎真正适用于我的代码 当我尝试插入数据库时 出现 SQLiteConstraintException 错误代码 19 约束失败 错误 这是插入操作的代码 db insert 现在返回 1
  • 短信管理器在少于 160 个字符时发送多部分消息

    我编写了一个使用短信管理器的应用程序 我用的方法sendTextMessage 但这行不通 现在我正在使用sendMutlipartTextMessage 这是工作 但当它大约 60 个字符时 它会发送多部分消息 这个是正常的 我读过的所有
  • 对话框片段中的 onActivityResult

    我正在从对话框片段中拍照 我还需要类似的东西startActivityForResult takePictureIntent actionCode Override public void onActivityResult int requ
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 运行 Espresso 测试时在 Android studio 中找不到属性 android:forceQueryable

    我已经使用 android studio 录制了我的 Android 应用程序 Espresso 测试记录浓缩咖啡测试选项中Run菜单 在记录的最后 我用自己的文件名保存了测试 单击保存按钮后 IDE 会自动在以下位置创建文件Android
  • Android 上的 Facebook 深度链接

    我正在尝试在我的应用程序上实现 Facebook 的深度链接功能 并遇到了以下情况 我有一个名为 MainActivity 的活动 其声明如下
  • Android - 按下后退按钮时停止 AsyncTask 并返回到上一个 Activity

    我有一个 AsyncTask 我希望它在按下后退按钮时停止执行 我还希望应用程序返回到之前显示的 Activity 看来我已经成功停止了任务 但应用程序没有返回到之前的活动 有任何想法吗 这是我的代码的摘录 private class My
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • Android PhoneGap 中的自定义字体

    我尝试为我的应用程序制作自定义字体 为此 我在 html 文件中编写了以下代码 在我的 HTML 正文中
  • 在应用程序的所有活动中重用操作栏

    我创建了一个 MenuActivity 它有一个操作栏和一个拆分操作栏 我想将此操作栏和 splitactionbar 视图用于我的应用程序中的所有活动 我是 android 的新手 所以有人可以逐步指导我 另外 我试图将搜索图标放在操作栏

随机推荐

  • JavaScript 过滤图像颜色

    嘿 我正在寻找一种拍摄黑白照片的方法img元素 并使用 JavaScript 指定 RGB 值 以便图像变成该颜色 有什么想法 除了图书馆 我也尝试只用 IE 来做到这一点 我只在 IE 中这样做的原因是因为我正在制作一个小的侧边栏小工具
  • 使用 Three.js 创建凹半球

    我是一名具有良好 JavaScript 经验的 Web 开发人员 目前正在探索Three js的可能性 然而 我对 3D 形状和词汇不是很熟悉 我不知道如何构建我需要的形状 我想创建一个半球体 并且能够投影视频inside这个球体 我有一个
  • 移动太慢时 jquery mouseleave 问题

    我正在使用 jQuery mouseenter 和 mouseleave 事件来上下滑动 div 除了 mouseleave 之外 一切都运行良好 只有当鼠标从 div 上移开的速度相当慢时 它才不会触发 如果我以相对正常或较快的速度移动鼠
  • 如何在 ctypes 中使用 typedef

    我正在尝试使用 ctypes 库在 Python 中包装 C 库 我这样包装结构 file c typedef struct int x int y Point file py import ctypes class Point ctype
  • 当跨度是锚点的子级时,不显示标题工具提示

    例如 考虑以下 DOM 结构 a href title The Anchor img src http www adiumxtras com images thumbs dango status icon set 7 19047 6248
  • 制作每日重置的InfluxDB/Grafana累积函数(锯齿图)

    我将能源使用数据记录为计数器 我希望将其显示为每天重置的累积图表 类似地在这里问 我可以按如下方式生成累积值 SELECT mean value FROM energy WHERE timeFilter GROUP BY time inte
  • 解决方案资源管理器中文件上的蓝色问号

    当通过 P4VS 打开绑定到 Perforce 的解决方案时 我的 VS2012 解决方案资源管理器中的文件上经常出现蓝色问号 看起来有些东西无法与仓库 工作区 诸如此类的东西 同步 点击 刷新视图 总是能解决问题 但我每天都这样做已经厌倦
  • 使用 PyArray_SimpleNew 创建 PyArrayObject 时出现分段错误

    我正在为 numpy 创建一个 C 扩展 该函数应该返回一个数组 因此我决定使用 PyArray SimpleNew 创建一个尺寸为 50x10 的 PyArrayObject 然后用一些值填充它 这是代码 PyArrayObject a
  • npm install 没有安装依赖项的依赖项

    When I npm install我的节点应用程序 我的包列表dependencies我的财产package json已安装 但是 由于某种原因 其中一些依赖项没有安装它们的子依赖项 换句话说 我的依赖项的依赖项没有node module
  • 无法让 CKEditor 插件在 django 中工作

    我正在尝试让 CKEditor 插件 codenippet 在 django 管理中工作 但无法做到 如果我没有在 settings py 中定义任何 CKEDIT CONFIGS CKEditor 就可以工作 如果取出 extraPlug
  • iText - 如何设置 PdfAnnotationInk 的描边宽度和不透明度

    绘制墨迹类型注释时 应该调用哪些函数来设置笔划宽度和不透明度 我已经浏览过 PdfAnnotation 和 PDFStamp 的类 API 但似乎没有直接设置宽度和不透明度的函数 有什么建议么 谢谢 我的示例程序 final String
  • 无法使用solr4配置Tika1.2

    我正在尝试使用 TikaEntityProcessor 来索引 html 文件内容 不知怎的 我无法正确地得到它 我检查了错误日志并收到以下错误 SEVERE Full Import failed java lang RuntimeExce
  • 平移到特定的 X 和 Y 坐标并居中图像 svg-pan-zoom

    我正在使用 ariutta svg pan zoom 库 https github com ariutta svg pan zoom 当用户单击按钮时 我尝试平移到 x 1000 y 20 处的特定形状 我还希望图像此时居中 我面临的问题是
  • 如何使用代码切换 Unity 中的复选框?

    我查看了 Toggle API 但找不到将其设置为使用代码检查的方法 http docs unity3d com ScriptReference UI Toggle html 我想要这样做的原因是我想根据游戏开始时的设置将复选框设置为选中状
  • 在 R 中使用多列作为键进行合并或 cbind

    我正在使用一个玩具示例 Data set A color number valueA red 18 0 2 blue 21 0 6 green 15 0 9 red 10 1 0 blue 11 2 1 green 13 3 6 Data
  • 为什么编译器允许你在这里“写入”const 变量?

    为什么你可以这样欺骗编译器 const int a 5 int a 5 VC armcc does not complain 当上面是 删节 时 相当于 const int ptr2const a int ptr ptr2const as
  • 来自 GATE 论文的 C 程序

    嘿 昨天我已经参加了 GATE 考试 在这次考试中有一个问题 以下 C 程序片段打印什么 char c GATE2011 char p c printf s p p 3 p 1 options A GATE2011 B E2011 C 20
  • Mac 上的“dotnetpublish”会创建一个 .dll,但在 Linux 上会生成一个可执行文件?

    当我跑步时dotnet publish在使用我的 Mac 的控制台应用程序上 结果是 dll in the bin Debug
  • Python三元运算符和else中的赋值

    三元运算符非常有用 为什么它在这种特殊情况下不起作用 c d d d c 1 if c in d else d c 1 它给 d c 1 if c in d else d c 1 SyntaxError invalid syntax 我在这
  • 通过 rtp 流发送 Android h264 捕获

    我正在为 android 编写一个 rtp 视频流媒体 它从 Android 本地套接字读取 h264 编码数据并将其打包 问题是我做到了 但我在客户端 Voip 不断收到黑框 通信过程如下 Android gt Asterisk gt J