快速业务通道

J2me流媒体技术实现讨论[1] - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

J2me流媒体技术实现讨论[1]

时间:2011-08-11

看到很多很多人持续在问这个问题。

以前我也听说,好像kvm底层实现不太支持j2me来做streaming video/audio,但我不知道那人为什么这么说。

那么现在国外有一个人提出下面这种思路,并且号称在Nokia6260[相关数据:诺基亚 6260 Nokia62602.0 (3.0436.0) SymbianOS7.0s Series602.1 ProfileMIDP-2.0 ConfigurationCLDC-1.0]

上真实实现了(两种网络方式:蓝牙和GPRS都试验过),但我怀疑他的前提条件是“你的手机必须允许同时实现player的多个实例进入prefetched状态(预读取声音流)”:

第一步:

声明两个Player;

第二步:

HttpConnection开始向服务器请求该audio文件的第一部分字节,我们定这次读取的字节数为18KB;

第三步:

等第一部分数据到位后,Player A开始realize和prefetch,并开始播放;

第四步:

在Player A播放同时,(18KB的amr数据可以播放10秒钟),HttpConnection继续请求第二部分数据(假设GPRS每秒钟传输3KB,那么18KB需要传输6秒,算上前后通讯损失的时间,应该不会超过10秒钟);

第五步:

第二部分数据到位后,假设Player A还没有播放完(这需要调整你的每一部份数据字节数来使得假设成立),那么将数据喂给Player B让它realize和prefetch;

第六步:

Player A播放完后,得到事件通知,于是让Player B开始播放。

如此往复。

大家看看此种理论可否。

我自己在nokia 7610上测试了一下,我上面说的前提被证明是可行的:“你的手机必须允许同时实现player的多个实例进入prefetched状态(预读取声音流)”。真实Nokia手机确实可以如此:两个线程中各自有一个Player,都开始做m_player.realize();和m_player.prefetch();,然后等候。

J2me流媒体技术实现讨论[1](2)

时间:2011-08-11

先播放线程1的Player,等她播放完后,通过

*
  * 本类实现了PlayerListener接口。通过这个事件来告知媒体已经播放完毕
  */
public void playerUpdate(Player player, String event, Object data){
  if(event == PlayerListener.END_OF_MEDIA){
   try{
    System.out.println("playerUpdate>>PlayerListener.END_OF_MEDIA");
    stopGauge();
    playForeground();
   }catch(Exception e){
    e.printStackTrace();
   }
  }
}

来通知第二个线程的Player播放。

这样是可以的。

qinjiwy说“可以,不过前提是该音频文件允许分段播放,有些音频文件就是不允许的.”,你说得对。确实有很多格式的媒体文件不支持分段播放。我所知道的是wav可以,mp3也可以。

服务端每次只读取这两种媒体文件的某一部分,如果是mp3文件的话,我暂时不知道是否每次需要加上特殊的头信息。

但是如果是WAV文件,那么肯定每次都要加上WAV特定的头,要不然Player也无法播放。

这种形式肯定是可行的。因为以前我在VC++上写Text To Speech程序时,就是这么做的:WAV文件的前若干个字节肯定是头信息,这是一定的,随后跟的全是RAW DATA;我每一次读取WAV的RAW DATA若干字节后,传给我的播放线程,他需要给这段RAW DATA前加上一个WAV HEADER,然后就可以正常播放了。

Server side java code:

public void transfer(DataOutputStream output) {
         try{  
                   int i = 0;
                   int auglis = 50058; //chunk size
                //if it is wav file, we need to edit header:
                   //audio[4] = (byte)0x8A;
                   //     audio[5] = (byte)0xC3;
                  //  audio[6] = (byte)0x00;
                  //  audio[7] = (byte)0x00;
                  
  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号