将录音上传到mysql并在网站上播放

时间:2011-04-27 16:14:35

标签: android

我有一个上传手机应用程序,可上传图片或录音。图像可以上传到mysql数据库并在网页上显示没有问题,我遇到的问题是在网页上播放音频,我已经通过播放我自己通过网页放入数据库的mp3文件测试了网页。当我从手机或模拟器上传MP3文件时没有播放。数据库填充了文件大小,在媒体播放器加载的网页上,但没有播放

编辑1 自写这篇文章以来,我已经了解到.amr文件中的android记录,而不是我创建该文件的.mp3。从那时起,我可以使用quicktime或real player在我的桌面上播放文件。当我尝试通过网络浏览器播放文件时,我会得到一个带有问号的quicktime徽标。下面是我播放文件的代码。

header('Content-type: audio/amr');

$query = mysql_query("SELECT * FROM media WHERE media_id= '$idd'"); 

$row = mysql_fetch_array($query); 

echo $row['file'];

在上面的

中嵌入110为$ idd的代码
<object data="sound.php?id=110 width='391' height='298'"> <embed src='sound.php' width='391' height='298'></embed>'ERROR' </object>

编辑2

如果我将相同的文件直接放在我的服务器而不是数据库中,则此代码会下载文件

<OBJECT classid='clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B' width="100" height="100"codebase='http://www.apple.com/qtactivex/qtplugin.cab'>
<param name='src' value="apr.amr">
<param name='autoplay' value="true">
<param name='controller' value="true">
<param name='loop' value="true">
<EMBED src="apr.amr" width="100" height="100" autoplay="true" controller="true" loop="true" pluginspage='http://www.apple.com/quicktime/download/'>
</EMBED>
</OBJECT>

编辑3上传代码

if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 

      $size = $_FILES['image']['size'];
      $type = $_FILES['image']['type'];

      // Temporary file name stored on the server
      $tmpName  = $_FILES['image']['tmp_name'];  

      // Read the file 
      $fp      = fopen($tmpName, 'r');
      $data = fread($fp, filesize($tmpName));
      fclose($fp);

      $data = addslashes($data);

      // Create the query and insert
      // into our database.
      $query = "INSERT INTO media";
      $query .= "(file, file_size, file_type) VALUES ('$data','$size','$type')";
      $results = mysql_query($query, $link);

      $mediaid = mysql_insert_id();

    $gender = $_POST['gender'];
    $cat_id = $_POST['cat'];
    $name = $_POST['name'];
    $lat = $_POST['lat'];
    $lon = $_POST['lon'];
    $user = $_POST['user'];


  $query="INSERT INTO instance (name, gender, cat_id, lon, lat, user_id) VALUES ('$name', '$gender', '$cat_id', '$lon', '$lat', '$user')";
  $result=mysql_query($query);


      $instanceid = mysql_insert_id();

      $query4 = "INSERT INTO media_link";
      $query4 .="(media_id, instance_id) Values ('$mediaid','$instanceid')";
      $results4 = mysql_query($query4, $link);

    }

// Close our MySQL Link
mysql_close($link);
?>

8 个答案:

答案 0 :(得分:3)

// Get the file contents from the database...

// Assuming a DB wrapper here.
$results = $db->query('SELECT `file_contents` FROM `mp3s` WHERE `id` = :id', array(':id' => $_GET['id'])->execute();
$fileContents = $results[0]['file_contents'];

// Send appropriate headers for content type and force download
header('Content-Type: mpeg/audio');
header('Content-Disposition: attachment; filename="BullsOnPowerade.mp3"')
echo $fileContents;

答案 1 :(得分:1)

因此,如果你有一个AMR文件(我没有测试过,所以你必须尝试这个),你需要提取AMR音频并将其转换为MP3。不幸的是,它似乎在Java中相当罕见,但一个(相当痛苦的)谷歌搜索出现了这个链接:http://www.benmccann.com/blog/extracting-amr-audio-from-android-3gp-files/声称演示从3gpp视频文件中提取音频,所以他们至少有一个AMR解析器。我会看看他们使用的底层库isobox4j(在http://groups.google.com/group/android-developers/browse_thread/thread/245c9de4132c2ab0?fwc=1讨论),看看你是否可以:

  1. 在手机应用程序中提取音频,转换为mp3,然后上传mp3(可能是最简单的选项,坦率地说:保持服务器简单)。
  2. 在将mp3流式传输到网页之前,提取服务器上的音频并转换为mp3(可能更难,坦率地说)。
  3. 祝你好运。

    编辑:或者你可能希望客户有一个合适的浏览器插件:破坏的quicktime标记表示quicktime没有编解码器。

    编辑2:您可能需要为插件设置内容类型,以便它知道该怎么做。对于AMR,请尝试添加

    header("Content-type: audio/amr");
    

    在PHP中的echo语句之前,如果这还不够,可以像这样在嵌入中添加一个mime类型:

    <object data="sound.php?id=110 width='391' height='298'"> <embed src='sound.php' type="audio/amr" width='391' height='298'></embed>'ERROR' </object>
    

    看看是否有效。

    编辑:试试这个。不确定$ row ['file']是否被视为字符串或数组,但修剪可能会做你需要的。

    <?php
    
    header('Content-type: audio/amr');
    
    $query = mysql_query("SELECT * FROM media WHERE media_id= '$idd'"); 
    
    $row = mysql_fetch_array($query); 
    
    echo trim($row['file']);
    exit;
    

答案 2 :(得分:1)

如果HTML5不是一个选项,对于内联播放,大多数当前浏览器支持的最佳选项将基于闪存。 Flash仍然需要一个插件,但它比Quicktime AFAIK安装得更广泛。

Tomasz建议的谷歌MP3播放器是一个不错的选择。不过还有很多其他的东西。请参阅示例http://www.webdesignbooth.com/10-easy-to-implement-flash-based-mp3-players-for-your-website/

答案 3 :(得分:0)

这是一个非常广泛的问题,但这里有一些初学者提示:

  • 查看apache httpcomponents project以获取良好的HTTP库,包括执行多部分MIME附件和POST请求的能力
  • 查看handling file uploads
  • 的PHP文档
  • 如果您不希望自己的应用在上传过程中锁定,我建议您查看android AsyncTask模式和支持类,以便您的UI线程在上传期间不会阻止
  • 有多种方法可以在网页中播放音频文件(Flash可能是最常见的)

答案 4 :(得分:0)

是的,音频文件只是一个二进制文件,可以保存为blob数据字段。然后从查询中回忆起来。然后以您想要的任何方式播放它。您可能最好将音频文件保存到本地存储并跟踪将其放在数据库中的位置。

答案 5 :(得分:0)

您可以在网页上使用Flash。在2.3上你可以使用音频标签。请参阅HTML5 <audio> tag on Android

答案 6 :(得分:0)

最简单的方法是使用时下的HTML5标签。
html5音频
<audio src="horse.ogg" controls="controls"> Your browser does not support the audio element. </audio>

使用谷歌MP3播放器 - 将mp3_file_url替换为文件的实际网址...虽然我不确定它是否运行.amr文件
<audio src="horse.ogg" controls="controls"> Your browser does not support the audio element. </audio>

编辑:

quicktime - 在两种情况下都更改 WIDTH HEIGHT ..并在您想要的参数中选择false / true <embed type="application/x-shockwave-flash" flashvars="audioUrl=MP3_FILE_URL" src="http://www.google.com/reader/ui/3523697345-audio-player.swf" width="400" height="27" quality="best"></embed>

答案 7 :(得分:0)

如果您想在自己的网页上嵌入视频,可以在Apple网站上阅读this支持文章,this是标记属性列表... 希望这可以帮助! :)