旁观者

参与软件开发开发这些年来,不断地遇到新领域新知识点,屡屡感受到新进入者的迷惑和彷徨,所以对遇到的每一个问题都详细记录问题现象、解决思路以及解决方案,并在blog中留下印迹,以备他日有心人google之而知之。
你们的新手之痛,你们的新业务发展之初的思路混沌,我都感同身受,所以欢迎和我一起探讨这些话题,诸如,文本挖掘/自然语言处理/Web3.0/J2ME/Web2.0/IVR/SMS/MMS/WAP/SIP/等等,知无不言言无不尽。
posts - 495, comments - 881, trackbacks - 39, articles - 1
   ::  ::  ::  :: 订阅 订阅 :: 管理

[J2ME]手机看交通监视器实时录像 实现说明

Posted on 2005-10-24 15:15 旁观者 阅读(15539) 评论(63)  编辑 收藏 网摘 所属分类: Java

[J2ME] 手机看交通监视器实时录像

实现说明

摘要:

本文档给出Mobile TrafficCam Viewer的实现说明。

1 简单描述Mobile TrafficCam Viewer的功能和特别之处

2 给出了 Mobile TrafficCam Viewer的下载资源

1背景、功能和特别之处

摘要:本章 简单描述Mobile TrafficCam Viewer的背景、功能和特别之处。

 

1.1. 手机看交通重要路口摄像头 北京司机的心愿?

我每天开车三个多小时,最喜欢听的节目就是1039的一路畅通。堵在北四环的时候,热切地盼望着主持人早点播报路况信息。但往往他们不说北四环,可能因为这里常年拥堵吧。这时就心想,要是我自己能够看到前行路上每一个交通要道的实况就好了,知道什么时候通了,什么时候茬上了,这样也有个盼头,或者提前选择道路避让。

 

您该问了,北京各个地方的交通监视器摄像头能提供给你吗?

答,可以,北京各个路口的摄像头实况,已经有人提供流媒体服务器播放了。

mms://real.u-mail.cn/cebeijing1,到 mms://real.u-ail.cn/cebeijing58。为了演示本项目,我选择了国贸桥的监视器:mms://real.u-mail.cn/cebeijing10

 

您又有疑问了,手机怎么看呢?

答,当然了,现有的各种品牌的手机都不会支持流媒体的,他们只能播放手机存储卡的媒体文件或者内存中的InputStream。我们呢,就必须自建一个服务器,帮助手机转换流媒体为手机支持的标准播放格式,然后提供给手机下载播放。这个下载转换过程是很快的。

 

那么,在当前移动网络带宽的情况下如何保证实用性呢?

答,我们并不是让手机播放实时的流媒体,而是当用户想看路况时,就通过GPRS通知我们的3GP转换服务器,仅仅去下载交通监视器流媒体数据的几秒钟长度数据,然后转换为3GP标准格式。这样,一段2秒钟的实时录像大约为35KB,在中国移动GPRS的带宽为13Kbps~54Kbps情况下,最多3秒钟就下载到手机上了并播放。整个过程大约在10秒钟之内就能完成,这样比较接近于实时交通了,用户应该可以接受。

 

下载的实况录像是否保存在手机上呢?

答,我们只将数据存储在内存中,然后让手机播放,并不会占用手机存储卡空间。

1.2. Mobile TrafficCam Viewer概要

我们提供的Mobile TrafficCam Viewer J2ME版本 就是这么一种概念:

一个可以下载到手机(例如Nokia7610已经确实可以下载安装并运行)Java应用程序。

每次选择它的“Download&Play”命令,它就会向我们的服务器发起请求(通过GPRS),然后下载服务器准备好的3gp格式数据,并播放它你还可以选择Replay刚才下载的交通路况录像。

 

1.3. 如何来体验Mobile TrafficCam Viewer

这样,每天当我在车里,在安慧桥前苦苦等待的时候,就可以拿起手机随时看一眼前方惠新东桥的实时路况录像,以解我心忧!

或者当我停在翠宫大厦前时,就可以先看一眼安慧桥的实时路况录像,以决定是不是还走四环。

 

如果你真的要在实际生活中用到这种功能,那么请申请开通你的GPRS包月套餐,那样20块钱就可以自由使用GPRS了。

建议你的手机是Nokia的手机,同时用Nokia程序管理器设置这个应用配置参数:在连接网络时第一次询问。

为了更好地体验本应用,请先下载TrafficCam.jadTrafficCam.jar到计算机上,安装了Nokia开发者模拟器后,用S60系列的模拟器来运行TrafficCam.jad。你就可以看到下面所描述的效果了。

在服务器端,我配置了一个Java Web Service,来做mms流媒体的格式转换工作,从WMV3格式转换为3gpp格式。3gpp格式是标准,MIDP2.0的手机都支持的。

 

1.4. Mobile TrafficCam Viewer功能列表

下面介绍Mobile TrafficCam Viewer的功能列表:

l         TrafficView

n         Download&Play

n         StopDownload&Play

l         Settings

l         About

l         Exit

 

下面就是应用程序的主界面:

                  

界面主菜单

1-1 Mobile TrafficCam Viewer的主界面

TrafficView界面 

1-2 Mobile TrafficCam ViewerTrafficView主界面,提供了Download&Play命令

国贸桥录像在手机上的显示

1-3 下载了国贸桥的交通录像,并在播放中

 

西直门

1-4 Mobile TrafficCam Viewer已经下载了西直门的交通录像,并在播放中

 

西直门重放

1-5 Mobile TrafficCam Viewer停止播放下载的交通录像,提供了Replay命令来重放

 

设置界面

1-6  Mobile TrafficCam ViewerSettings界面,来设置转换服务器地址以及下载录像的秒数
 

1.5. 特别之处

下面,我们说说这个应用程序的特别之处。

l         这个应用程序的总体思路其实很简单,最重要的工作是在服务器端由一个Java Web Service做的。本Midlet应用就是利用KSoap2和远端Web Service交互之后,下载3gp媒体文件流,然后播放。

l         MVC的类分解,采用了 mingjava 的思路。

l         RMS记录存储的封装模式以及对资源的调用方式,则参照了索爱公司的BlueGammon游戏代码。

 

对于MVC的类分解,你还可以参考我的另一篇文章《[J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明》以及《[J2ME]Mobile TrafficCam Viewer设计说明》

BlueGammon游戏源代码,你可以从

http://files.cnblogs.com/zhengyun_ustc/Bluegammon-eclipse.rar 下载。

BlueGammon的代码很经典,我只是套用了BlueGammonRmsFacade类,将对RMS的操作完全封装起来。另外用VideoSettings类来提供存储和读取RMS中关于本应用所需要的几个参数的功能,VideoSettings其实就是调用了RmsFacade类。

 

总结一下特别之处。

l         可以设置转换服务器下载多少秒钟长度的交通实时录像;

l         可以选择从158个摄像头的录像,遍及京城各个角落;

l         可以设置远程服务器的Web ServiceURL

l         转换出的3gp格式能够实际被手机所播放。(并不是每一个Convert Application都能够转换出能够真正被Nokia手机识别的3gpp格式!我也是花费了很长时间才寻找到解决之道的。)

 

实际上,mpeg格式也是很多手机支持播放的,但是因为mpeg数据量是3gpp格式的两倍以上,而且3gpp格式是未来的标准,所以最终我们还是选择了3gpp

那么什么是3gpp呢?

3G peer protocol(3gpp)是基于3G移动通信网络上的一种创建、传输、回放多媒体的标准。这种标准是基于MPEG-4编码技术的。市面上众多的MPEG-4标准只要支持3GPP这个标准都可以用于3G移动通信设备上。

1.6. 小结

总的来说,让手机播放流媒体,目前是做不到的。但是不等于说,基于流媒体的应用就无法在手机上实现,只要换一个思路,就可以。

不过,交通路况实时录像是一个比较特殊的流媒体移动应用。它的用户是可以接受只能察看几秒钟乃至10秒钟的录像的,因为短短几秒钟的路况录像信息就足以让人判断出来是拥堵还是畅通了。

 

2 资源

我的Mobile TrafficCam Viewer资源:

1《[J2ME]手机实时交通监视器开源说明》

2:下载源代码:http://files.cnblogs.com/zhengyun_ustc/trafficcam-src.rar

3:下载midletjad: TrafficCam.jad jar:TrafficCam.jar

 

网络资源:

1熟练使用J2ME在实际开发中的可选包MMAPI

2实例解析MMS流媒体协议,下载LiveMediaVideo[1]

3BlueGammon

4:北京各个路口的摄像头实况。以后下班前先看看路况再走

mms://real.u-mail.cn/cebeijing1 mms://real.u-ail.cn/cebeijing58

下面是已经辨认出来的:

3 三元桥 mms://real.u-mail.cn/cebeijing3

7 马甸 mms://real.u-mail.cn/cebeijing7

8 西直门 mms://real.u-mail.cn/cebeijing8

9 西厢月坛桥 mms://real.u-mail.cn/cebeijing9

10 国贸桥 mms://real.u-mail.cn/cebeijing10

14 天宁寺桥 mms://real.u-mail.cn/cebeijing14

15 永定门 mms://real.u-mail.cn/cebeijing15

16 手帕口桥 mms://real.u-mail.cn/cebeijing16

17 西二环(官园北)?mms://real.u-mail.cn/cebeijing17

26 十里河 mms://real.u-mail.cn/cebeijing26

27 木樨园南mms://real.u-mail.cn/cebeijing27

34 北二环小街桥 mms://real.u-mail.cn/cebeijing34

35 二环东直门 mms://real.u-mail.cn/cebeijing35

36 二环德胜门 mms://real.u-mail.cn/cebeijing36

37 安定门 mms://real.u-mail.cn/cebeijing37

41 三环蓟门桥 mms://real.u-mail.cn/cebeijing41

42安贞桥 mms://real.u-mail.cn/cebeijing42

44 白石桥 mms://real.u-mail.cn/cebeijing44

47 阜石路出四环西北角 mms://real.u-mail.cn/cebeijing47

48 西四环五棵松北 mms://real.u-mail.cn/cebeijing48

50 北苑路 mms://real.u-mail.cn/cebeijing50

51 八达岭 mms://real.u-mail.cn/cebeijing51

52 八达岭2 mms://real.u-mail.cn/cebeijing52

 

郑昀@ultrapower

产品名称

产品版本

Keyword: Mobile VideoControl Media 媒体播放 j2me midp midlet  交通 实时路况录像WebCam  java

Mobile

TrafficCam

Viewer

1.1.0

 

0
0
(请您对文章做出评价)
« 上一篇:[j2me]利用JLayerME-CLDC0.2播放MP3的试验[1]
» 下一篇:[j2me]KSoap2在Nokia真机上可能导致SymbianOS error -28

Feedback

#1楼   回复  引用    

2005-10-24 15:26 by superhasty
It's so wonderful!

#2楼[楼主]   回复  引用  查看    

2005-10-25 17:45 by 让变化成为计划的一部分      
20051024做了以下修改:
1:不使用Ksoap2来连接Web Service,而是Ksoap;这样就能够在Nokia真机上避免“symbianos error = -28”的错误;参见我的《[j2me]KSoap2在Nokia真机上可能导致SymbianOS error -28》。
2:将交通摄像头的流媒体地址也放在设置中,这样你可以手动选择是看国贸的还是西直门的摄像头了。
现在,你就可以下载http://www.cnblogs.com/Files/zhengyun_ustc/TrafficCam-deployed.rar,将jar包安装到你的手机上,立即体验移动浏览交通各地监视器了!

#3楼[楼主]   回复  引用  查看    

2005-10-25 17:46 by 让变化成为计划的一部分      
因为我们自己的服务器被封1755流媒体端口,所以我把java web service架设在朋友的服务器上了。

#4楼[楼主]   回复  引用  查看    

2005-10-25 18:57 by 让变化成为计划的一部分      
如果运行时候出了错,请一定要告诉我,谢谢了!

请描述你的运行环境是什么。

如果是模拟环境的话,我建议是Nokia的nds_jme_v3_0开发包中的S60模拟器,并且保证你的机器能够连接网络;你可以用ie浏览http://219.238.239.166:8088/TrafficStream/services/Streaming看看,来保证你能够连接我的web service;



如果是真机的话,请问是什么机型?请注意,索爱的K700C是不能够播放3gpp格式的媒体文件的。

推荐使用Nokia 7610或者6600,这都是经过真机测试的,运行本应用没有问题。



最后,请下载最新的jar包,这样保证不是因为程序的bug造成的。

#5楼[楼主]   回复  引用  查看    

2005-10-25 22:52 by 让变化成为计划的一部分      
为什么说一张或者多张图片并不足以让驾车用户感受到道路状况呢?
是这样的,我们开车的时候,4车道的道路上也可能有上百辆车排在这里,但是并不一定代表道路拥堵!因为可能上百、上千辆车却可以以时速60公里前进,这是一个很常见的情况,这时候通过一张或者几张静止的图片,是无法判断道路状态的,你是看不出来车辆的集体行进速度的,也有可能是20公里/小时,甚至是原地不动的。

#6楼   回复  引用    

2005-10-26 10:27 by 麦芽[未注册用户]
今天雾太大了,摄像头根本看不到什么...呵呵

#7楼[楼主]   回复  引用  查看    

2005-10-26 11:15 by 让变化成为计划的一部分      
早上起来,用手机一看国贸桥,啥也看不见,根本看不见车!雾太大!
看来这种视频方式有缺陷,下雨下雪阴天不成!

#8楼[楼主]   回复  引用  查看    

2005-10-27 11:26 by 让变化成为计划的一部分      
可能是因为我的程序一直在使用交通监视器的流媒体服务吧,所以在昨天下午16点之后他们已经把流媒体服务器关闭了,只剩下了一个mms://real.u-mail.cn/cebeijing11能够使用了。

#9楼[楼主]   回复  引用  查看    

2005-10-27 11:31 by 让变化成为计划的一部分      
如果是服务器端Tomcat服务停止了,那么j2me这边就会报告“Symbian OS error = -34”,异常类型就是java.io.ioexception,具体原因可能是tcp not open之类的描述。

看来您连接的时候,tomcat服务停止了。

现在我上去已经把它启动了。

#10楼   回复  引用    

2005-11-23 22:43 by junyoung[未注册用户]
写的非常好.加油.发现一点小问题.每次重复打开FormSetting,TextField都会增加数量,我是在模拟器运行,2005.10.24版本,也许已经修正,班门弄斧了

#11楼[楼主]   回复  引用  查看    

2005-11-24 10:16 by 让变化成为计划的一部分      
谢谢,10月26日修改过了,应该不会了吧。

#12楼   回复  引用    

2005-12-27 18:39 by acat[未注册用户]
用支持jsr172的手机么?

#13楼[楼主]   回复  引用  查看    

2005-12-27 19:01 by 让变化成为计划的一部分      
我不是用JSR172解析的XML,所以不需要JSR172。

#14楼   回复  引用    

2006-03-27 11:36 by 小枫[未注册用户]
是怎么调节Xilisoft 3GP Video Converter(视频格式转换器)的压缩率的?大家帮帮看~

#15楼   回复  引用    

2006-03-30 15:51 by 王松[未注册用户]
请问,我用eclipse 怎么才能正确运行你的源程序呀?
我需要哪些配置?
请各位大哥赐教
qq:362169969
wangsong_1121@163.com
小弟感激不尽!!!

#16楼[楼主]   回复  引用  查看    

2006-03-31 10:34 by 让变化成为计划的一部分      
本程序和其他J2ME程序一样,在eclipse(环境中必须安装了WTK2.2)下都可以直接运行,没有任何特殊之处。只要你曾经用过j2me开发程序,就会明白。如果你没有学过j2me,那么请到j2medev.com看看。

#17楼   回复  引用    

2006-04-04 21:05 by 王松[未注册用户]
非常感谢!!

#18楼   回复  引用    

2006-04-07 14:37 by 王磊lzj[未注册用户]
您好!我是一名在在校大学生,今年毕业,目前我正在完成我的毕业设计,而我的设计内容就是参考您的这个程序,一个类似的监控程序。
现在我的问题是:
1、您没有公布你的服务端程序源码,不知你能否传我一份作为参考。首先声明我不会全部抄袭您的代码,更不会将其用于商业用途,只是作为参考之用。如果可以的话,我的邮箱是my10beauty@163.com。
2、不知您在服务器采用什么方法进行格式转换,是采用一个现成的软件吗?如果是的话,能告诉我是什么软件?或者是其它什么方法?
期待您的回复!先在这里谢谢您啦!

#19楼[楼主]   回复  引用  查看    

2006-04-07 15:17 by 让变化成为计划的一部分      
1:server side src抱歉不能提供;
2:格式转换很简单,就是ffmpeg,这个linux世界广泛使用的底层工具。

#20楼   回复  引用    

2006-04-07 16:08 by 王磊lzj[未注册用户]
感谢您的回复!!

#21楼   回复  引用    

2006-04-08 16:17 by 王磊lzj[未注册用户]
关于在java程序中使用ffmpeg对mms进行格式转换,您能不能提供一些代码片段,或是推荐一些示例程序来作为参考?这部分内容我看了半天,似乎短时间内难以理清头绪,所以希望借助您的帮助,让我尽快找到门道。
先谢谢啦!!!

#22楼[楼主]   回复  引用  查看    

2006-04-08 16:49 by 让变化成为计划的一部分      
ffmpeg就是那些参数,并没有多余的文档。他只是一个工具而已,已有的功能已经很完善了,不需要进行修改。
仔细研习那些参数。

#23楼   回复  引用    

2006-04-09 15:59 by 王磊lzj[未注册用户]
您提供的那个格式转换服务器已经关了,不知道有没有可能再开起来,我想用来进行测试。

#24楼[楼主]   回复  引用  查看    

2006-04-09 22:46 by 让变化成为计划的一部分      
那台服务器已经无法控制了

#25楼   回复  引用    

2006-04-13 13:23 by 王磊lzj[未注册用户]
经过反复尝试,现在可以用ffmpeg转换出可以播放的3gp文件,但是总是存在一些问题一些。我想看看您转换时的完整参数,能贴出来让我看看吗?

谢谢!

#26楼[楼主]   回复  引用  查看    

2006-04-13 14:53 by 让变化成为计划的一部分      
我仅仅是用ffmpeg是转换出AMR文件的:
ffmpeg.exe -i 源文件名 -ac 1 -acodec amr_nb -ar 8000 输出AMR文件名
仅此而已。
譬如说:
将mp3转换为amr-nb:
ffmpeg -i demo.mp3 -ac 1 -acodec amr_nb -ar 8000 demo.amr

#27楼   回复  引用    

2006-04-13 19:47 by 王磊lzj[未注册用户]
那在你的服务器程序中,就只是用这么一句来转换的吗???

ps:能不能把你已经编译好的服务器程序提供一份,我在自己机器上架个服务器。

我不会去反编译它,更不会把它用做商业用途。

可能这个请求有点过分,但是请相信,我并不是那种不肯自己动手研究,只会向别让讨代码用的人,因为这部分东西我算是第一次接触,有很多东西不能马上摸透,所以才总麻烦你。我是真的需要些帮助。

#28楼[楼主]   回复  引用  查看    

2006-04-13 22:51 by 让变化成为计划的一部分      
当然不是。服务器还需要把流媒体落地呀。文章中的“可以设置转换服务器下载多少秒钟长度的交通实时录像”已经能说明这一操作了。

#29楼   回复  引用    

2006-04-14 13:48 by 王磊lzj[未注册用户]
“服务器还需要把流媒体落地呀”。这我知道,下次我问您的问题可能就会与这个有关。“就只是用这么一句来转换的吗”我问这句的意思是,你在把落地的流媒体文件转为3gp时就只是用这么一句吗??在实际的程序代码中就是这么写的吗??我需要的是您在程序中写的,已经测试能用的那些参数设置。
“我仅仅是用ffmpeg是转换出AMR文件的: ffmpeg.exe -i 源文件名 -ac 1 -acodec amr_nb -ar 8000 输出AMR文件名仅此而已。譬如说:将mp3转换为amr-nb:ffmpeg -i demo.mp3 -ac 1 -acodec amr_nb -ar 8000 demo.amr”,您的这段说明我完全明白,这些理论我已经都懂了。我缺少的不是这些理论,而是经验,所以我想从你的实际代码中直接领悟这些经验。这也就是为什么我会想您要一些代码片段来看的原因啦。

#30楼[楼主]   回复  引用  查看    

2006-04-14 18:09 by 让变化成为计划的一部分      
这东西没有什么经验。我在“手机听播客”开源项目中也就是用:
ffmpeg -i demo.mp3 -ac 1 -acodec amr_nb -ar 8000 demo.amr
这种命令转换MP3的,ffmpeg就是指定好codec就行了的。
我不太清楚你到底遇到了什么麻烦。能描述出来吗?

#31楼[楼主]   回复  引用  查看    

2006-04-14 18:18 by 让变化成为计划的一部分      
至于3gp的转换,确实需要反复摸索参数,但ffmpeg/mencoder的错误提示是很好的,仔细体会还是能够知道是什么原因导致的。
你可以看看
《Converting 3GP video files HOWTO,http://julian.coccia.com/article-66.html》。
你也不妨把你的命令贴出来。翻来覆去,就那么几个参数,没有太多的选择余地的。

#32楼   回复  引用    

2006-04-15 14:42 by 王磊lzj[未注册用户]
非常感谢您的回复!!!

#33楼   回复  引用    

2006-04-15 15:16 by 王磊lzj[未注册用户]
我确实没有把问题说清楚,我本来是想看了您的参数以后应该会明白我的问题出在哪里。那就来说一下我的问题吧:我从wmv格式的文件(视频文件)转过来的3gp文件在播放器中只有第一次可以正常播放,而replay的时候却只有声音没图像。用的就是您所说的命令:
ffmpeg -y -i test.wmv -ac 1 -acodec amr_nb -ar 8000 -s 128x96 test.3gp
我猜想可能要指定3gp的比特率、帧数等等,所以我用下面这条命令
ffmpeg -i video.3gp test.wmv
不为了转换,只想看看3gp的一些参数(test.3gp是可以正常播放的,无论是第一次还是重放)。结果得到
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.3gp':
Duration: 00:00:02.4, start: 0.000000, bitrate: 73 kb/s
Stream #0.0(und), 32.25 fps(r): Video: h263, yuv420p, 176x144
Stream #0.1(und): Audio: amr_nb, 8000 Hz, mono
于是我照着这些参数构造这样的命令:
ffmpeg -y -i test.wmv -ac 1 -acodec amr_nb -ar 8000 -s 128x96 -b 73 -r 32.25 test.3gp
问题依旧。可能还有一些我没有注意到的细节,但是我目前对这部分东西的了解仅限于此了,继而向您求助。

#34楼[楼主]   回复  引用  查看    

2006-04-16 13:24 by 让变化成为计划的一部分      
你所说的这种情况十分蹊跷。怎么可能说你转换出来的3gp文件,能够第一次播放成功,之后就再也无法正常播放了呢?

1:你用什么播放器播放的?如果你所说的是你自己编写的j2me mmapi播放器,那么可能是你的代码问题。
2:其次我不知道你为什么要选择128*96这种格式。3gp标准是176x144。你可以看看http://club.game-v.com/reply_list.aspx?id=2a504a26-7e38-476d-be6c-595ee98a6803&bid=ed66ef83-abdc-49b2-a54c-7ba5ed936673,其中贴出了转3gp视频各类所需软件及问题解答。

#35楼   回复  引用    

2006-04-16 13:44 by 王磊lzj[未注册用户]
1。我的机器上装了Nokia PC suite,所以我测试3gp的时候都是用它里面的一个媒体播放器。我用自己的j2me播放器播放时会有这样的异常
java.lang.Exception: Cannot parse this type of AMR
at com.nokia.phone.sdk.concept.util.mmedia.audio.amr.AMRParser.parse(AMRParser.java)
at com.nokia.phone.sdk.concept.util.mmedia.audio.amr.VideoAMRParser.parse(VideoAMRParser.java)
at com.nokia.phone.sdk.concept.util.mmedia.audio.amr.AMRDecoderPlugIn.process(AMRDecoderPlugIn.java)
at com.sun.media.BasicFilterModule.process(BasicFilterModule.java:322)
at com.sun.media.BasicModule.connectorPushed(BasicModule.java:69)
at com.sun.media.BasicOutputConnector.writeReport(BasicOutputConnector.java:120)
at com.sun.media.SourceThread.process(BasicSourceModule.java:729)
at com.sun.media.util.LoopThread.run(LoopThread.java:135)
然后图像、声音全没有。
2。采用128×96是因为我用S40模拟器,分辨率小一点可以全屏显示。我想这应该不会有影响吧。
另:如果我在参数中加一个视频编码 如 -vcodec mpeg4 则可以在Nokia播放器上播放(重放也行),但在程序中放不出来,异常如上。

#36楼[楼主]   回复  引用  查看    

2006-04-16 19:25 by 让变化成为计划的一部分      
1:先说vcodec吧,显然你不能用mpeg4。我希望你能了解3gp若是在手机上的话,是H263编码标准。所以,请遵照这一定律,用“-vcodec h263”或者“-vcodec h263p”。
2:我就说嘛,其实你开始和我沟通的方式就不对,上来就管我直接要代码。那么下次呢,如果你要解决你自己的开发问题,最好把完整的场景描述出来,你用什么东西转换什么,然后在什么模拟器上用什么播放什么,遇到了什么现象,你又进行了哪些尝试,你有哪些结论,这样的话,别人一看就知道该怎么回答你了。这回从4月7日开始,你就直接要代码,而我又偏偏只开放手机客户端代码,于是咱们一来一回扯了许久的皮,耽搁了你的不少开发进度。

#37楼[楼主]   回复  引用  查看    

2006-04-16 19:38 by 让变化成为计划的一部分      
1:“Cannot parse this type of AMR”?你用什么参数创建的Player呢?对于*.3gp的媒体文件,应该是“video/3gpp”,我想你应该是这么做的吧?应该不会用“audio/amr”吧?
2:我用你前面提供的“ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 128x96 -b 73 -r 32.25 test.3gp ”在我这里转换视频为3gp文件,是可以用Nokia Multimedia player播放的。暂时没有在j2me上试。不过以我的经验,是不会有问题的。

#38楼   回复  引用    

2006-04-17 12:58 by 王磊lzj[未注册用户]
1。我知道应该用h263,因为我已经看过了3gp的那些参数。我用mpeg4只是想做个试验试一下看。
2。既然您已经转出来能用的啦,我现在开始怀疑是我的源视频文件有问题(test.wmv),再去试试。
3。我用的是video/3gpp。
4。“其实你开始和我沟通的方式就不对”。呵呵,看了让您有戒心了,不好意思啊。因为我是那种喜欢独立解决问题的人,不是万不得已的话,很少去问别人。我觉得有一份代码的话,我会更直接的得到我想知道的答案。所以,虽然您说了这样的话,如果可能的话,我还是希望您能给我一些代码片段。不需要全部,只要能让我明白问题在哪就好。

另:您原来的那个服务器已经不能用啦,不知有没有在别的地方重新架起来呢?在我没有把我自己的服务器搞定之前,恐怕只能借您的那个来测试。

#39楼[楼主]   回复  引用  查看    

2006-04-17 14:57 by 让变化成为计划的一部分      
1:
我想如果你遭遇“java.lang.Exception: Cannot parse this type of AMR”错误,那么应该不会影响视频的播放,虽然你说第一次在模拟器中播放时可以。那么你要想重新播放,建议就干脆close掉player,然后重新createplayer重新加载影片好了,而不是单纯地调用player.start来重新播放。

#40楼[楼主]   回复  引用  查看    

2006-04-17 15:00 by 让变化成为计划的一部分      
2:
既然单纯是音频格式不被识别,我想还是应该在acodec上做做文章。在真机上你测试过吗?你的模拟器是哪一个厂商的哪一款?

#41楼[楼主]   回复  引用  查看    

2006-04-17 15:38 by 让变化成为计划的一部分      
3:
基于“java.lang.Exception: Cannot parse this type of AMR”的异常错误,如果怀疑是ffmpeg转换程序造成的话,那么你可以把Nokia手机拍摄的录像传到服务器上,这种文件格式就是3gp的,而且肯定是Nokia自己的手机程序拍摄的并能播放的。
但是,不幸,我用mmapi在Nokia S60模拟器上播放这种文件时依然得到“java.lang.Exception: Cannot parse this type of AMR”错误,没有声音,只有视频。

4:
我用下面的命令行
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
自行转换出的3gp文件,能够在Nokia S60模拟器上播放视频,但没有声音,也得到了java.lang.Exception: Cannot parse this type of AMR。


综上所述,我不得不怀疑S60模拟器是不是有问题。

#42楼[楼主]   回复  引用  查看    

2006-04-17 16:37 by 让变化成为计划的一部分      
5:
我为什么要怀疑仅仅是S60模拟器的问题呢。因为我把转换好的3gp文件放在我的服务器上,用
player = Manager.createPlayer(url);
player.realize();
player.prefetch();
这种代码在我的Nokia7610真机上运行播放这个远端资源http://218.249.90.118/toodou/test.3gp,结果完美无缺地播放了,有声音,有图像!
所以说明真机的MMAPI对于3gp文件中的音频解析是没问题的。出问题的是S60模拟器。

#43楼[楼主]   回复  引用  查看    

2006-04-17 17:24 by 让变化成为计划的一部分      
just see my post:
http://www.cnblogs.com/zhengyun_ustc/archive/2006/04/17/Cannot_parse_this_type_of_AMR.html,《[J2ME Q&A]MMAPI的Cannot parse this type of AMR异常之讨论》。

#44楼   回复  引用    

2006-04-18 15:17 by 王磊lzj[未注册用户]
1。“建议就干脆close掉player,然后重新createplayer重新加载影片好了”,这个建议很有道理。不过,我看到在您的程序中就是直接调用start()来重放的,既然已经证明可以实现,应该没理由不行啊。
我下载了你的那个test.3gp,和我的一样不能重放。恐怕问题确实是出在ffmpeg上了。

2。“我不得不怀疑S60模拟器是不是有问题”,这我还真的没有想到,感谢您作了这么深入的研究。

#45楼[楼主]   回复  引用  查看    

2006-04-18 18:02 by 让变化成为计划的一部分      
“我下载了你的那个test.3gp,和我的一样不能重放。恐怕问题确实是出在ffmpeg上了。”
你不能说问题是ffmpeg造成的,应该怀疑Nokia模拟器。
重申两点:
1:不管是哪一个厂商,他的模拟器都可能有很多BUG,这不见得有官方文档,只有我们自己去体会。
2:不管是哪一个厂商,他的真机的KVM有很多BUG,也需要我们自己去摸索。

#46楼   回复  引用    

2006-04-18 20:11 by 王磊lzj[未注册用户]
1。看了您的建议之后,我又去作了一些尝试,发现只要在Nokia MultiMedia Player 中设置为“始终重复播放”后,就可以正常重放。于是我试着在程序中用player.setLoopCount(-1),将Player设置为无限重复,然后捕捉END_OF_MEDIA事件,在处理函数中用stop()停止,等待replay命令,这样基本上解决了问题,可以实现正常重放。
2。仍然让人不解的时:Nokia developer's suite自带的几个例子中有一个带了一个3gp视频文件,我之前所做的测试都是用它的,而这个文件就可以完成正常播放,无论是java.lang.Exception: Cannot parse this type of AMR,还是不能重放的问题,都没有。恐怕Nokia使用的3gp格式与我们所知的标准有些许不同吧。
3。不管怎么说,格式转换的问题算是解决了,感谢您这么多天以来的耐心回复。下一次我问您的问题,可能就与下载流媒体有关了。还是那句话,如果有可能的话,我希望您能给我一些代码,不需要全部,也不需要一定是您写的不可,我只想更直接的汲取我所需要的。

再次感谢您!!!

#47楼   回复  引用    

2006-07-08 10:09 by drhu00[未注册用户]
请问目前哪个服务器是好用的?

#48楼[楼主]   回复  引用  查看    

2006-07-08 12:39 by 让变化成为计划的一部分      
都不能用。毕竟那已经是很久很久以前的事情了。

#49楼   回复  引用    

2006-09-09 10:42 by zhuang[未注册用户]
请问能不能这样做
服务器上放一个比较大的3gp文件
手机端利用http头的RANGE来下载指定数据
也就是说3gp的分割在手机端进行
如果可以那下载下来的数据怎样可以播放

#50楼   回复  引用    

2008-01-07 10:47 by huangqiqun[未注册用户]
MMAPI是不是智能播放小的文件,我试着播放1M的3gp,没有任何响应。

#51楼[楼主]   回复  引用  查看    

2008-01-07 15:04 by 旁观者      
to huangqiqun :
这里是播放的更小的3gp。
再说了,你试着播放,是不是只是在一台手机上测试的?兄弟,别只逮住一个手机品种测试。多做几种机型再下结论!

#52楼   回复  引用    

2008-01-08 17:39 by huangqiqun[未注册用户]
经本人试验,MMAPI可以和JSR 75结合播放手机本地文件系统的3gp,mp3等流行格式。但是有两点很遗憾:
(1)播放3M的文件,Player缓冲了1分钟,不过播放效果挺好的;
(2)播放本地的文件,当我试着要离开播放界面,返回主界面,player.close()出现异常,导致程序没响应。
关于第2点, 那位仁兄能够帮我解决。Thanks in advance!

#53楼[楼主]   回复  引用  查看    

2008-01-09 00:00 by 旁观者      
相信j2medev.com的bbs是你的最佳选择

#54楼[楼主]   回复  引用  查看    

2008-01-09 00:01 by 旁观者      
“player.close()出现异常,导致程序没响应”,你为何会这么认为,你有明确的证据吗?还是猜测?
建议你还是在论坛里发帖,那样得到回答会快很多。

#55楼   回复  引用    

2008-01-09 13:49 by huangqiqun[未注册用户]
第二个问题已解决,自己写程序的疏忽。

#56楼   回复  引用    

2008-01-09 13:51 by huangqiqun[未注册用户]
播放大的媒体文件,缓冲时间太长是个严重的问题。

#57楼[楼主]   回复  引用  查看    

2008-01-09 19:07 by 旁观者      
那就不要播放大媒体文件。MMAPI设计时不是为了播放大文件用的,它是在内存里全部展开,而不是窗口式读取播放。

#58楼   回复  引用    

2009-03-15 00:17 by ppcppc[未注册用户]
怎么一路摄像头都不能看呢?
mms://real.u-mail.cn/cebeijing1,到 mms://real.u-ail.cn/cebeijing58
都不行。
是服务器停止了吗?

#59楼[楼主]   回复  引用  查看    

2009-03-15 11:06 by 旁观者      
@ppcppc
注意看,那都是05年的事儿了。而且06年的回复中已经表明各个流媒体服务器已经关闭。

#60楼   回复  引用    

2009-08-28 09:08 by asdasdasd[未注册用户]
Project TrafficCam is missing required library: 'C:\ZhengYun\PublicLibrary\Java\ksoap-midp.zip'是怎么回事啊

#61楼[楼主]   回复  引用  查看    

2009-08-30 19:18 by 旁观者      
@asdasdasd
缺ksoap,那你就在project里主动配上ksoap不就完了?直接引用ksoap的源代码到project里,或者import一个ksoap包也可以。

#62楼   回复  引用  查看    

2009-09-13 16:00 by amy_whm1      
能否把 转换3gp的webservice代码共享下呢