使用 Android 低级 api 解码 H264 流

2023-12-26

我在 android 中使用 MediaCodec 低级 Api 来解码从 IP 摄像机接收到的 h264 原始流。 来自 IP 摄像机的原始流,通过 TCP/IP 连接接收。

要解码流,我的代码是:

@Override
protected void onCreate(Bundle savedInstanceState) {

 MediaCodec mCodecc;
 MediaFormat mFormat;
 BufferInfo mInfo;
 ByteBuffer[] inputBuffers ;
 ByteBuffer[] outputBuffers ;

}
protected void Init_Codec()
{
  mCodecc = MediaCodec.createDecoderByType("video/avc");
  mFormat =  MediaFormat.createVideoFormat("video/avc", width, height);

  mInfo = new BufferInfo();
mFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
  mCodecc.configure(mFormat, holder.getSurface(), null,0);
}

protected void Start_Codec()
{
  mCodecc.start();          
  inputBuffers = mCodecc.getInputBuffers();
  outputBuffers = mCodecc.getOutputBuffers();
}

private void OnRawStreamReceived(final ByteBuffer buffer)
{

 mHandler.postAtFrontOfQueue(new Runnable() {

@Override
public void run()
{
       int inIndex = mCodecc.dequeueInputBuffer(10000);
   if(inIndex>=0)
     {
    inputBuffers[inIndex] = buffer;
    mCodecc.queueInputBuffer(inIndex, 0,buffer.limit(),System.currentTimeMillis(), 0);
    }
       int outIndex = mCodecc.dequeueOutputBuffer(mInfo, 10000);
       switch (outIndex) {

    case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED:
    Log.d("DecodeActivity", "INFO_OUTPUT_BUFFERS_CHANGED");
    outputBuffers = mCodecc.getOutputBuffers();
    break;

    case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
    Log.d("DecodeActivity", "New format " + mCodecc.getOutputFormat());
    break;

        case MediaCodec.INFO_TRY_AGAIN_LATER:
    Log.d("DecodeActivity", "dequeueOutputBuffer timed out! --- size : " + mInfo.size );
    break;

    default:
    ByteBuffer buffer = outputBuffers[outIndex];

            mCodecc.releaseOutputBuffer(outIndex, true);
    break;
    }
}


int outIndex = mCodecc.dequeueOutputBuffer(mInfo, 10000);

但在这行代码中,我总是收到“-1”。 mInfo.size() 也是我得到的“0”。并且它在给定表面上没有显示任何内容。

我缺少哪一步。请指导我。 谢谢


我假设您正在传递单独的“访问单元”,即每个缓冲区一帧视频。

您似乎缺少的是编解码器设置块,该块预计位于提交的第一个缓冲区中(也可以塞入MediaFormat via format.setByteBuffer("csd-0", ...))。假设数据来自您的特定编码器,您所要做的就是将第一个缓冲区与BUFFER_FLAG_CODEC_CONFIG http://developer.android.com/reference/android/media/MediaCodec.html#BUFFER_FLAG_CODEC_CONFIG flag.

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

使用 Android 低级 api 解码 H264 流 的相关文章

  • 在Android中将半径边框绘制到imageview或textview的一个角落

    我需要在我的应用程序中为图像视图或文本视图绘制边框 但我只需要在一个角落绘制它 就像图像一样 我做了一个形状 但我在所有 4 个边上都有边框
  • Android Ble GATT_ERROR 133 经常使用三星设备

    我正在研究 BLE 应用程序 我已经使用 Nexus Moto Samsung LG 等不同设备进行了测试 我仅在三星设备中收到 GATT 错误 133 三星 A5 2016 尝试连接 10 次 但只连接了 2 或 3 次 请帮助我 Non
  • 删除 json 对象字符串中的“\”

    如何删除下面字符串中的特殊字符 String x message content toom recipients id 1000001865 room subject room 我使用了 x replaceAll 但它不起作用 您必须转义正
  • Mesibo 通话 UI 未更新

    我正在尝试更改 Mesibo Call UI 的配置 但它并没有改变 我尝试如下 MesiboCallConfig mesiboCallConfig new MesiboCallConfig mesiboCallConfig backgro
  • Android-全屏视频视图

    我正在尝试使此 VideoView 以全屏模式显示 public class ViewVideo extends Activity private String filename private static final int INSER
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc
  • Android Studio:Android 设备监视器未显示我的设备

    我的真实设备是索尼 Xperia c6502安卓版本4 3 我确定我将其连接到我的计算机然后打开开发者选项 USB调试 on 在 SDK 管理器中 Google USB 驱动程序已安装 I downloaded Xperia Z Drive
  • Android 导航回到 Activity;不要重新加载父级

    我有一个场景 我单击 ListFragment 并启动一个新的 Activity 如下所示 public void onListItemClick ListView l View v int position long id super o
  • Kotlin 和惯用的书写方式,基于可变值“如果不为空,则...”

    假设我们有这样的代码 class QuickExample fun function argument SomeOtherClass if argument mutableProperty null doSomething argument
  • 将 firebase auth 与 google app engine 云端点集成

    有人可以指定 使用一些示例代码 如何验证谷歌云端点中的 firebase 令牌吗 最近提出的问题根本没有澄清 如何将 Firebase 身份验证与 Google 应用引擎端点集成 https stackoverflow com questi
  • 返回主要活动(意图)时传递数据我做错了什么?

    我是安卓新手 这可能是最简单的问题 但我不明白这里出了什么问题 我试图创建一个通过意图传递值的基本示例 因此 当我关闭第二个活动时 我需要将数据传递到主活动 这是代码 意图测试1 主要活动 public void onClick View
  • 取消通知

    我使用Onesignal推送通知 需要取消所有onPause和onResume的通知 NotificationManager notificationManager NotificationManager getApplicationCon
  • 以编程方式应用样式资源

    我没有找到一种以编程方式做到这一点的方法 所以我在这里发布这个问题 我也没有找到与此相关的任何问题 我有一个资源样式 在 res values styles xml 中定义 我想做的是使用 java 将这种样式应用到我正在操作的 View
  • popupBackground 与 Material Design 相关的问题

    我一直致力于将我的应用程序更新为 Material Design 我有一个使用选项卡的应用程序 由于某种原因 每当我使用 android popupBackground 设置下拉菜单颜色时 它就会崩溃 我设置了一个带有选项卡的默认项目并使用
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • 获取当前图片在图库中显示的位置

    在我的应用程序中 我有一个图片库 但我想检测当前显示图像的位置 例如 当我启动我的活动时 位置是 0 但是当我在图库中滚动时 我想获取当前显示图像的位置 我尝试过 OnFocusChanged OnItemClicked 但只有当我单击图库
  • 从多个 TextView 中选择文本

    如何在android中从多个文本视图中选择文本 我已经尝试过以下代码 该代码一次仅适用于一个文本视图 我想一次性从许多文本视图中复制文本 android textIsSelectable true 你不能同时这样做 您需要在单个文本视图中设
  • Android:如何在布局中放置纯色矩形?

    我有一个可以很好地膨胀的relativelayout 我想在顶部添加一个跨越布局宽度的纯色矩形 我尝试将以下内容放入我的 xml 中
  • Android中绑定适配器有什么用?

    我一直在阅读有关Android中绑定适配器的文章 但我似乎不明白它 何时使用绑定适配器 有人可以用一个简单的例子来解释它吗 我读过的一篇文章在主活动中有一个绑定适配器 绑定适配器有一个参数 toastMessage 显然 只要 toastM
  • 如何让用户在android列表视图中选择主题?

    我有一个带有两个标签的列表视图 标题和副标题 我想要深色和浅色背景作为用户选项 标题具有 textAppearanceMedium 副标题具有 textAppearanceSmall 我希望样式 MyTheme Dark 具有白色文本 My

随机推荐

  • 类库项目文件未编译为 .dll 或调试

    在我的解决方案中 我有一个编译成 dll 的类库项目 我有一个网络项目 我有多个具有不同网络项目但具有相同类库的解决方案 类项目中的文件之一 utilities cs 突然不会编译到 dll 中 我对此文件进行了更改 但更改不会显示在网站上
  • 在 Swift 3 中获取 GCD 标签

    我有一些代码可以获取当前 GCD 队列的标签以用于日志记录 在 Swift 2 中如下所示 if let queueName String UTF8String dispatch queue get label DISPATCH CURRE
  • 调用对象数组时出现空引用异常[重复]

    这个问题在这里已经有答案了 我早些时候试图获得一些帮助 但我认为我没有提供足够的信息 尽管我很感谢所有的建议 目标只是将对象室的新实例添加到数组中并打印到列表框 当用户尝试输入已经存在的房间名称时 它应该简单地显示在数组中已经存在的房间的规
  • JQuery Datepicker - 仅选择星期一和星期四

    我有以下代码 仅允许用户从 jquery datepicker 选择星期一 我想对此进行调整 以便能够选择星期一和星期四 有任何想法吗 beforeShowDay function date return date getDay 1 您可以
  • 如何在引导列之间添加边距而不换行[重复]

    这个问题在这里已经有答案了 我的布局目前看起来像这样 在中心列中 我想在每个之间添加一个小边距Server分区但是 如果我向 CSS 添加边距 它最终会换行并看起来像这样 div class row info panel div class
  • 如何在不运行两个单独的进程调用的情况下获取 DBI 中的行计数?

    我正在 Perl 中运行 DBI 但无法弄清楚当我运行准备好的语句时如何确定返回的行计数是否为 0 我意识到我可以在 while 循环中设置一个计数器来获取行 但我希望有一种不那么丑陋的方法来做到这一点 基于快速浏览here http ww
  • 网站阻止 Selenium:有办法绕过吗?

    该网页手动打开正常 但使用 Selenium 时直接出现 维护 错误消息 from selenium import webdriver driver webdriver Chrome executable path chromedriver
  • Godot 监听来自同一场景的多个实例的信号

    我有以下场景 玩家 敌人 攻击 当攻击与敌人发生碰撞时 敌人会发出 onHit 信号 播放器监听该信号并反弹 这一切都运行良好 但现在如果我复制敌人 因此有多个敌人场景 我如何收听所有敌人的信号 有没有办法获取场景的所有实例并连接到它们的所
  • 是否可以使用宏来修改结构类型实例调用的生成代码?

    例如如下代码 object Test extends App trait Class val f1 Int val c new Class val f1 Int 1 val f2 String Class println c f1 prin
  • 使用嵌入动态框架的第三方框架

    据我了解 ios动态框架和静态的巨大变化是静态在链接时 启动之前 静态链接到代码 而动态在启动 运行时链接 现在我有一个测试项目 我的项目有一个与之链接的动态框架 A framework import A framework A frame
  • 如何递归地检查旧的 git 提交(包括所有子模块)?

    我有一个包含多个子模块的 git 存储库 这些子模块之一拥有自己的多个子模块 我想要做的就是检查主存储库上的旧提交 并让它检查所有子模块中的适当提交 以获得当时代码的正确状态 我知道 git 包含必要的信息ls tree命令可以告诉我每个子
  • UWP - 在 xaml 中的图像上创建数据绑定工具提示

    我有一个数据驱动的集线器部分 可以很好地填充图像 视图模型包含我想作为工具提示显示的文本 但无法完全弄清楚 这是重要的片段
  • 如何从android中的事件坐标获取视图?

    我想拦截我的父视图上的触摸事件onInterceptTouchEvent MotionEvent ev 从那里我想知道单击了哪个视图以执行其他操作 有什么方法可以知道从收到的运动事件中单击了哪个视图 对于任何想知道我做了什么的人来说 我不能
  • Firebase 安全规则:“规则集使用旧版本”,当前版本是什么?

    firebase 版本 8 4 1 通过 Firebase init 我创建了一些文件 现在 firebase 部署正在抱怨 firebase storage 错误信息是 规则集使用旧版本 版本 1 请更新到最新版本 版本 2 这有什么问题
  • 如何使用 grunt-usemin 和 font Awesome

    我正在尝试使用 grunt usemin 来缩小我的 css 我在我的index html 中使用像这样的Font Awesome 当我运行 usemin 时 我将所有样式组合在一起 但是 当我尝试使用缩小版本时 Font Awesome
  • 使用 itertools 进行格雷码顺序的笛卡尔积?

    有没有类似Python的东西itertools product 提供通过一组集合的笛卡尔积的迭代格雷码顺序 例如 假设存在这样一个假设的生成器 它被称为gray code product then gray code product a b
  • Django 管理更改顶部和底部的列表滚动条

    在我的 Django 变更列表中 有很多列 这意味着列表底部有一个滚动条 是否可以让滚动条出现在顶部 这样我就不需要向下滚动 Thanks Grant 感谢 AlexandreS 一分钱掉下来 这就是我所做的 我使用了这个插件 https
  • 如何运行 Play! Heroku 上的后台工作

    我的 Play 几乎不使用 heroku 现在的应用程序 我是新的 我可以部署 Web 应用程序 但后台作业无法运行 我尝试添加工作人员 但收到此错误 heroku scale worker 1 Scaling worker process
  • Zend Framework:尝试通过 /controller/action url 访问其他视图时,仅索引视图呈现 404 错误

    我是 Zend 框架的新手 我正在运行 Apache 2 2 并将 httpd conf 文件中的 DocumentRoot 设置为使用 Zend Tool 创建的公共目录 在公共目录中我有一个 htaccess 文件 RewriteEng
  • 使用 Android 低级 api 解码 H264 流

    我在 android 中使用 MediaCodec 低级 Api 来解码从 IP 摄像机接收到的 h264 原始流 来自 IP 摄像机的原始流 通过 TCP IP 连接接收 要解码流 我的代码是 Override protected voi