我有一个可以录制和播放音频文件的应用程序。一些音频文件是使用 httpclient 使用简单的标准 http 下载来下载的。很长一段时间,它就像一个魅力。现在突然间我无法播放我下载的文件。此堆栈失败。我将文件存储在 SDCard 上,但在手机和 USB 连接设备上都遇到了问题。
我已经检查过下载的文件在服务器上没有问题,我可以毫无问题地播放它。
这些是我使用的代码 fragment (我知道 recordingFile 是该文件的有效路径)。
// inside the activity class
private void playRecording() throws IOException{
File recordingFile = new File(recordingFileName);
FileInputStream recordingInputStream = new FileInputStream(recordingFile);
audioMediaPlayer.playAudio(recordingInputStream);
}
这是媒体播放器代码:
// inside my media player class which handles the recordings
public void playAudio(FileInputStream audioInputStream) throws IOException {
mediaPlayer.reset();
mediaPlayer.setDataSource(audioInputStream.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
}
异常(exception)情况:
E/MediaPlayerService( 555): offset error
E/MediaPlayer( 786): Unable to to create media player
W/System.err( 786): java.io.IOException: setDataSourceFD failed.: status=0x80000000
W/System.err( 786): at android.media.MediaPlayer.setDataSource(Native Method)
W/System.err( 786): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:632)
W/System.err( 786): at net.xxx.xxx.AudioMediaPlayer.playAudio(AudioMediaPlayer.java:69)
W/System.err( 786): at net.xxx.xxx.Downloads.playRecording(Downloads.java:299)
W/System.err( 786): at net.xxx.xxx.Downloads.access$0(Downloads.java:294)
W/System.err( 786): at net.xxx.xxx.Downloads$1.onClick(Downloads.java:135)
我已经尝试寻找偏移错误的一些答案,但不太清楚这个问题可能是什么。
PS 我用这段代码下载文件:
public FileOutputStream executeHttpGet(FileOutputStream fileOutputStream) throws ClientProtocolException, IOException{
try {
// Execute HTTP Post Request
httpResponse = httpClient.execute(httpPost, localContext);
int status = httpResponse.getStatusLine().getStatusCode();
// we assume that the response body contains the error message
if (status != HttpStatus.SC_OK) {
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
httpResponse.getEntity().writeTo(ostream);
fileOutputStream = null;
} else {
InputStream content = httpResponse.getEntity().getContent();
byte[] buffer = new byte[1024];
int len = 0;
while ( (len = content.read(buffer)) > 0 ) {
fileOutputStream.write(buffer,0, len);
}
fileOutputStream.close();
content.close(); // this will also close the connection
}
} catch (ClientProtocolException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
fileOutputStream = null;
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
fileOutputStream = null;
}
return fileOutputStream;
}
最佳答案
我自己解决了。正如我所说,我在解决方案上方的评论是这样的:
当我重构部分代码时,我在用于允许下载而不是允许下载的哈希码上打错了字。不幸的是,当我下载强制文件为空的文件时,我没有正确的捕获。基本上,如果您尝试在没有正确激活码的情况下检索文件,我会发送错误的请求 header 。
罪魁祸首在这里:
if (status != HttpStatus.SC_OK) {
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
httpResponse.getEntity().writeTo(ostream);
fileOutputStream = null;
} else {
InputStream content = httpResponse.getEntity().getContent();
byte[] buffer = new byte[1024];
int len = 0;
while ( (len = content.read(buffer)) > 0 ) {
fileOutputStream.write(buffer,0, len);
}
fileOutputStream.close();
content.close(); // this will also close the connection
}
对于状态代码返回为错误的情况(即阻止访问的错误请求 header )。我错过的是在那里捕获空指针的情况,这导致 SQLite 条目被更新,声称应用程序下载成功但事实并非如此。
经验教训:始终对这些情况进行空检查,即使是原型(prototype)也是如此。 :-)
关于安卓媒体播放器 : setDataSource issue for downloaded media file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2798227/
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我正在从Rails3.2进行流式下载(CSV),并且遇到初始页面请求需要很长时间的问题。以下Controller代码说明了我的问题:self.response_body=Enumerator.newdo|y|10_000_000.timesdoy有了上面的内容,响应看起来确实像是流式传输(来自可以支持它的服务器......在我的例子中是Unicorn)。也就是说,在它开始流式传输之前,它挂起的时间比我想要的要长得多。如果我将其更改为以下内容,它会启动得更快:self.response_body=Enumerator.newdo|y|1000.timesdoy我的理解是响应应该从循环的第
快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目
我使用Kafka流媒体从KAFKA主题中消费。(KafkaDirect流)此主题中的数据每5分钟从另一个来源到达。现在,我需要处理每5分钟后到达的数据,并将其转换为SparkDataFrame。现在,流是数据的连续流。我的问题是,如何确定我已经完成了在Kafka主题中加载的第一组数据的阅读?(以便我可以将其转换为数据框架并开始我的工作)我知道我可以提及某个数字的批处理间隔(在JavastreamingContext中),但是即使那样,我也永远无法确定源将数据将数据推到主题的时间。欢迎任何建议。看答案如果我正确理解您的问题,您希望不创建批处理,直到阅读5分钟的所有数据。开箱即用的Spark不会提
我正在尝试将图像上传到PingFM。他们的documentation说:media–base64encodedmediadata.我可以通过URL访问此图像。我试过(几乎猜到了)这个:ActiveSupport::Base64.encode64(open("http://image.com/img.jpg"))但是我得到这个错误:TypeError:can'tconvertTempfileintoStringfrom/usr/lib/ruby/1.8/base64.rb:97:in`pack'from/usr/lib/ruby/1.8/base64.rb:97:in`encode64'
MediaSourceExtensions和WebRTC之间的根本区别是什么?请允许我表达一下自己的理解。WebRTC包括一个RTCPeerConnection,它处理从媒体流中获取流并将它们传递到一个协议(protocol)中,以便流式传输到应用程序的连接对等点。似乎在WebRTC的幕后抽象了许多更大的问题,如编解码器和转码。这是一个正确的评估吗?MediaSourceExtensions适合什么地方?我的知识有限,但看过开发人员运行自适应流媒体的示例。MSE是否只处理来自您服务器的流?帮助将不胜感激。 最佳答案 不幸的是,这些与
首先,很抱歉在这里重新提出这个问题。我已经尝试了两天如何使用javascript/jquery完成这项工作,我想我已经阅读了所有堆栈溢出和其他关于此的博客文章,所以请不要将其标记为重复,因为我无法使用2012年到2017年的过时脚本。我有一个页面重定向到第三方电子学习平台,其中一些内容需要flash才能工作。许多用户不关心他们的机器上安装了哪些软件(多么新,呵呵)所以我需要检测它并显示典型消息“请单击此处安装/更新FlashPlayer”,但我找不到“现代"执行此操作的脚本/方式,在任何地方,尽可能简化。我尝试过的所有脚本都已弃用或在所有浏览器中返回false,即使我安装并激活了最新版
我有一个带有输入字段的页面。当页面处于媒体类型打印时,我想隐藏所有0值文本字段。我试过jQuery.但这在屏幕模式和打印模式下都有效。HTML:somescreensomeprintPrintJS:$('button').click(function(){$('input[type=text]').each(function(){if($(this).val()==0){$(this).hide()}})})CSS:@mediaprint{.screen{display:none;}.print{display:block;}}@mediascreen{.screen{display:
我正在尝试与KurentoWebRtc服务器共享我的屏幕。但是得到这个错误:NavigatorUserMediaError{name:"ScreenCaptureError",message:"",constraintName:""}同样的代码在Firefox中没有错误。用于webrtc的约束:varconstraints={audio:true,video:{mandatory:{chromeMediaSource:'screen',maxWidth:1920,maxHeight:1080,maxFrameRate:30,minFrameRate:15,minAspectRatio: