Android 2.2 HTTP 渐进式流媒体 = HTTP 直播流媒体吗?

2023-11-22

Stagefright 媒体框架 (Android 2.2) 支持 HTTP 渐进式流式传输。
那是什么意思? IE。这是HTTP Live Streaming协议的实现吗?

如何在 Android 上使用 HTTP Live Streaming,我的意思是客户端是什么 - Web 浏览器、MediaPlayer 或只是“SDK 内”实现,我必须从某个类继承?


一个很大的实际差异是 Stagefright 媒体框架支持 mpeg 3 流,而旧引擎不支持。例如,您可以使用 (shoutcast) mp3 流。

下面是一个简单的实现示例,它流式传输喊播 URL:http://fr3.ah.fm:9000。请注意,这仅适用于 Android 2.2 及更高版本。

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class SimpleMusicStream extends Activity implements
  MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener,
  MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener {

 private String TAG = getClass().getSimpleName();
 private MediaPlayer mp = null;

 private Button play;
 private Button pause;
 private Button stop;

 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);

  play = (Button) findViewById(R.id.play);
  pause = (Button) findViewById(R.id.pause);
  stop = (Button) findViewById(R.id.stop);

  play.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
    play();
   }
  });

  pause.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
    pause();
   }
  });

  stop.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
    stop();
   }
  });
 }

 private void play() {
  Uri myUri = Uri.parse("http://fr3.ah.fm:9000/");
  try {
   if (mp == null) {
    this.mp = new MediaPlayer();
   } else {
    mp.stop();
    mp.reset();
   }
   mp.setDataSource(this, myUri); // Go to Initialized state
   mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
   mp.setOnPreparedListener(this);
   mp.setOnBufferingUpdateListener(this);

   mp.setOnErrorListener(this);
   mp.prepareAsync();

   Log.d(TAG, "LoadClip Done");
  } catch (Throwable t) {
   Log.d(TAG, t.toString());
  }
 }

 @Override
 public void onPrepared(MediaPlayer mp) {
  Log.d(TAG, "Stream is prepared");
  mp.start();
 }

 private void pause() {
  mp.pause();
 }

 private void stop() {
  mp.stop();

 }

 @Override
 public void onDestroy() {
  super.onDestroy();
  stop();

 }

 public void onCompletion(MediaPlayer mp) {
  stop();
 }

 public boolean onError(MediaPlayer mp, int what, int extra) {
  StringBuilder sb = new StringBuilder();
  sb.append("Media Player Error: ");
  switch (what) {
  case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
   sb.append("Not Valid for Progressive Playback");
   break;
  case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
   sb.append("Server Died");
   break;
  case MediaPlayer.MEDIA_ERROR_UNKNOWN:
   sb.append("Unknown");
   break;
  default:
   sb.append(" Non standard (");
   sb.append(what);
   sb.append(")");
  }
  sb.append(" (" + what + ") ");
  sb.append(extra);
  Log.e(TAG, sb.toString());
  return true;
 }

 public void onBufferingUpdate(MediaPlayer mp, int percent) {
  Log.d(TAG, "PlayerService onBufferingUpdate : " + percent + "%");
 }

    }

主要.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button
  android:text="Play"
  android:id="@+id/play"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"></Button>
 <Button
  android:text="Pause"
  android:id="@+id/pause"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"></Button>
 <Button
  android:text="Stop"
  android:id="@+id/stop"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"></Button>
</LinearLayout>

阅读更多http://developer.android.com/guide/topics/media/index.html检查异步准备

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

Android 2.2 HTTP 渐进式流媒体 = HTTP 直播流媒体吗? 的相关文章

  • 如何在 ADB 连接期间禁用电池充电?

    问题描述 每次我在电脑和手机之间连接 USB 线时 电池都会自动充电 我想使用 ADB 协议 但我不想在 ADB 连接期间为电池充电 是否可以关闭此充电功能 当然 我该怎么做呢 环境 Android 操作系统 4 及更高版本的手机 我只需要
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 让协程等待之前的调用

    我还没有完全掌握 Kotlin 协程 基本上我希望协程在执行之前等待任何先前的调用完成 下面的代码似乎可以工作 但它正在做我认为它正在做的事情吗 private var saveJob Job null fun save saveJob s
  • 需要使用手机后退按钮返回 Web 视图的帮助

    这是我的代码 package com testappmobile import android app Activity import android os Bundle import android view KeyEvent impor
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • 在随机位置启动 HTML5

    我有一个大约 2 小时长的音轨 我想在我的网站上使用它 我希望它在页面加载时在随机位置开始播放曲目 使用 HTML5 可以吗 我知道您可以使用 element currentTime 函数来获取当前位置 但是如何在完全下载之前获取曲目的总时
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 使用 Android Firebase 堆栈推送通知

    我开发了使用 Firebase 接收推送通知的 Android 应用程序 我的代码基于 Firebase Google 官方文档 https firebase google com docs cloud messaging android
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • 如何使用应用程序接口将蓝牙套接字传递给另一个活动

    因此 根据我收集的信息 套接字连接既不可序列化 也不可分割 但我需要将蓝牙连接传递给另一个活动 我不想作为中间人编写服务 所以请不要将此作为解决方案发布 我听说有一种方法可以使用自定义应用程序接口来传递这些类型的对象 但我一生都找不到这样的
  • android textview 有字符限制吗?

    我正在尝试在 android TextView 中输入超过 2000 3000 个字符 它不显示任何内容 任何一份指南是否对 android textview 有字符限制或什么 我在G3中做了一些小测试 我发现 如果activtiy布局中有
  • TextInputLayout 对于在 EditText 中以编程方式给出提示没有效果

    我有一个 EditText 它的父级是 TextInputLayout 我试图以编程方式为 EditText 提供提示 不在布局中 在这种情况下 文本输入提示动画不起作用 它像简单的 EditText 一样工作 有人可以建议如何处理它吗 下
  • 我在 PopupMenu 中使用 ShareActionProvider,但显示两个 PopupMenu?

    我在 PopupMenu 中使用 ShareActionProvider 但是当我单击共享菜单项时 它会在屏幕上显示两个 PopupMenus 一个被另一个覆盖 一个显示应用程序图标和名称 另一个仅显示应用程序名称 除了这个问题之外 它工作
  • 由于“进程崩溃”,仪器运行失败。

    我想运行以下测试 package com xxx yyy import android content Context import androidx test InstrumentationRegistry import androidx
  • 无法使用文件提供程序从内部存储打开 PDF 以便在 Android 8 和 9 上查看

    仅适用于 Android 8 和 9 我这里有一个 PDF 文件管理器 String url file storage emulated 0 Android data com verna poc files Download mypdf p
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • R.java是手动修改的!恢复到生成的版本

    我在布局中添加了一个 xml 文件 之后这个错误就来了 但问题是我还没有接触过 R java 文件 现在 在我的新活动中 我要将其内容视图设置为我新创建的 xml 文件 但是当我执行 R layout 时 新创建的 xml 不会出现在建议中
  • 如何在布局编辑器中模拟沉浸式模式

    我想在布局编辑器中全屏查看我的布局 我正在使用 eclipse 插件 我已经通过选择隐藏了 ActionBar NoActionBar组合中的主题 但导航栏是一个不同的故事 AFAIK 它只能使用代码中的标志来隐藏 我需要在活动 xml 文
  • 将焦距(以毫米为单位)转换为像素 - Android

    在 Android 中 我当前正在访问camera s焦距通过使用getFocalLength in Camera1 Camera2不是一个选择 我正在尝试完全填充当前的计算 focal length pix focal length m

随机推荐

  • org.springframework.context.ConfigurableApplicationContext 类型无法解析

    当我尝试在 Spring Tool Suite 中创建第一个应用程序时 出现以下错误 该行有多个标记 org springframework context ConfigurableApplicationContext 类型无法解析 这是
  • Rails:从列中选择唯一值

    我已经有了一个可行的解决方案 但我真的很想知道为什么这不起作用 ratings Model select rating uniq ratings each r puts r rating 它选择但不打印唯一值 而是打印所有值 包括重复项 它
  • 我可以在 C++ 中创建一个新运算符吗?如何创建?

    MATLAB 数组支持矩阵运算和元素运算 例如 M N and M N 这是区分两种不同操作的非常直观的方法 如果我想在C 中实现类似的操作 我该怎么做 我可以创建一个新的运算符吗 也 如果是 有人可以给我一些指导吗 不 你不能超载op C
  • 如何从 if 语句中获取类模板的实例? (C++)

    假设我有一个类模板 其中有一个成员pData 这是一个AxB任意类型的数组T template
  • 是否可以将喷气背包中的一排边缘倒圆?

    这就是我想要实现的目标 因此 我连续创建了 2 个圆形按钮 并根据是否选择它们提供了不同的背景颜色 目标是创建一种选项卡 切换的错觉 未选中的按钮将具有与该行的背景颜色相同的颜色 不幸的是 由于行是矩形形状 因此在拐角处有残留空间 仍然显示
  • 抑制整个脚本的错误

    我想抑制 VBS 登录脚本中可能出现的所有错误 我可以用以下内容包围整个 500 行脚本吗 On Error Resume Next whole script 500 lines of code On Error GoTo 0 You ca
  • 角度过滤器按字符匹配?

    我有角度 1 3 并且有以下数组 data id 2 name danny davids age 9 id 3 name sanny gordon age 9 我希望过滤器执行以下操作 当我开始写 s 这个词时 我希望 danny davi
  • 流 - 按属性和最大值收集

    问题陈述 给定以下课程 针对问题进行了简化 public static class Match private final String type private final int score public Match String ty
  • 如何在android中获取浏览器历史记录?

    我想实现一个应用程序来获取android默认浏览器历史记录并将浏览器历史记录保存到xml文件中 但是浏览器历史记录在某些设备中没有保存到xml文件中 我已经实现了我的应用程序来获取浏览器历史记录信息以保存到 xml 文件 如下所示 priv
  • 使用表单更新谷歌电子表格上的现有数据?

    我想建立一种自动系统来更新锦标赛的一些比赛结果 我有一个自动电子表格 显示了所有结果 但更新所有结果需要花费很多时间 所以我想知道是否可以制作一个表格以便更轻松地更新它们 在表格中 我将输入车手姓名和他在比赛中赢得的积分 锦标赛每月有 4
  • Python 中的递归生成器

    我编写了一个函数来返回一个生成器 其中包含给定长度的子字符串的每个唯一组合 这些子字符串包含主字符串中的 n 个以上元素 举例来说 如果我有 abcdefghi 和长度为 2 的探针 并且每个列表有 4 个元素的阈值 我想得到 ab cd
  • 捕获所有 JavaScript 错误并将其发送到服务器 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我想知道是否有人有在全局范围内处理 JavaScript 错误并将其
  • Django 中两个模型之间的多对多关系

    我正在尝试建立一个网站 用户可以添加他们正在学习的课程 我想知道应该如何添加ManyToMany关系 这样我们就可以根据课程代码或讲师或任何字段获取课程中的所有用户 我们还可以获取用户注册的课程 目前 我的数据库结构是 class Cour
  • 不同型号手机上的布局

    最近我为 Galaxy 10 1 7 英寸 1024x600 480x800 Note 800 高度和 S3 720 高度开发了一个应用程序 它们都在这些分辨率上完美运行 但当我们谈论 Note 2 和 Galaxy 7 Plus 等设备时
  • 使用python从列表中随机提取x个项目

    从两个列表开始 例如 lstOne 1 2 3 4 5 6 7 8 9 10 lstTwo 1 2 3 4 5 6 7 8 9 10 我想让用户输入他们想要提取的项目数量 占整个列表长度的百分比 以及从每个列表中随机提取的相同索引 例如 假
  • Log4net html 格式的 SmtpAppender

    我正在尝试以 HTML 格式向我发送电子邮件
  • Spark 如何将切片并行化为任务/执行器/工作器?

    我有一个 2 节点 Spark 集群 每个节点有 4 个核心 MASTER Worker on master Worker on node1 火花配置 从站 主站 节点1 SPARK WORKER INSTANCES 1 我试图理解 Spa
  • Pyqt获取鼠标点击图像时的像素位置和值

    我想知道如何通过在图像 QImge 中单击鼠标来选择像素并获取像素位置和值 Thanks self image QLabel self image setPixmap QPixmap C myImg jpg self image setOb
  • Mysql:阅读 const 表后注意到不可能的地方

    我有一个疑问 SELECT l id title FROM SELECT id FROM news WHERE title LIKE football predictions argentina OR text LIKE football
  • Android 2.2 HTTP 渐进式流媒体 = HTTP 直播流媒体吗?

    Stagefright 媒体框架 Android 2 2 支持 HTTP 渐进式流式传输 那是什么意思 IE 这是HTTP Live Streaming协议的实现吗 如何在 Android 上使用 HTTP Live Streaming 我