【Stones from other hills】windows mobile和symbian平台下rtsp流媒体播放器
来源:互联网 发布:手机故障诊断软件 编辑:程序博客网 时间:2024/06/05 08:59
经过一段时间的努力手机3G应用流媒体播放器项目终于接近尾声了。回想整个过程历经坎坷阿!一共开发了两个平台的应用,首先是windows mobile平台,相对symbian来说资源多一些,所以先拿它下手阿。
说一下实现思路,刚开始考虑使用directshow,经过验证没达到预期目的(水平差阿,不懂directshow),接着研究tcpmp,寻思开发一个rtsp流插件,再加上mpeg4的插件不就行了吗!一段时间之后发现tcpmp太牛了,没看懂!(没注释、没文档),在快要跳楼的时候决定改为比较最原始的实现方式,
步骤如下:
1、读取网络数据。
2、交给解码器解码。
3、转换格式。
4、显示绘制。
首先mobile平台有很多wince和开源的东西可以拿过来用,例子有很多不过大多都是播放本地文件。在这里有两个例子初学者可以看看。
赛安软件工作室提供的一个mpeg4解码例子很不错可以研究一下。它用自己的解码器,可以播放15分钟,可以为自己所用的是他的写屏和yuvtorgb等。
另外一个就是使用ffmpeg和sdl的例子,可以参考一下他使用ffmpeg的方法。ffmpeg在mobile平台下的代码我这有,网上也有!具体下载位置不说了,在google里搜索ffmpeg4mobile有很多个下载点。
有了上面两个例子开始搞自己的东西吧。首先是rtsp读取网络流,这个东东网上也有,可以直接拿过用,我用的是开源的live55,不过需要移植一下。效率还可以!有了网络数据就要解码了,解码模块可以使用ffmpeg,但是效率不高,就考虑使用xvid,xvid这个解码器效率不错,并且也是开源的。有了网络数据和解码器其余的都是小问题了,解码器输出的yuv420,需要把它转换为rgb。这步转换网上很多,没有搜不到,只有想不到啊!最后参考第一个例子的绘制部分就可以搞定!
附图:
再一个symbian平台,此平台也有例子!网络大大地好,都有例子参考阿!
首先还是是赛安软件工作室提供的一个mpeg4解码例子symbian平台,不过不能debug,只能真机跑,遗憾中。不过绘制部分可参考!
另一个例子就是MobiFLV,主要播放flv文件,采用ffmpeg部分解码代码。此例子可以为我所用的是yuv2bgr的转换。
symbian平台有一个openc插件,安装之后用c写的程序很容易移植过来,这个东西不错哦!
安装openc插件之后同mobile一样,首先是rtsp读取网络流,我用的是简单rtsp流,不过需要移植一下。效率还可以!有了网络数据就要解码了,解码模块可以使用ffmpeg,但是效率不高,就考虑使用xvid,xvid这个解码器效率不错,
并且也是开源的。symbian显示时可以参考MobiFLV,解码器输出的yuv420,需要把它转换为BGR。
附图:
以上代码虽说网上都有,但是也有我的汗水啊!Email sizhiguo512·163.com交流
几个注意点:
1、mobile平台的全屏方式
if(g_fFullScreen)
{
// To get info full screen mode, first hide all of the shell parts.
dwState = (SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);
SHFullScreen(GetSafeHwnd(), dwState);
#ifdef POCKETPC2003_UI_MODEL
if(hmenu != NULL)
{
::ShowWindow(hmenu, SW_HIDE);
}
#endif
// Next resize the main window to be the size of the screen.
SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
MoveWindow(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, TRUE);
}
else
{
RECT rcMenuBar = {0};
// To get into normal mode, first show all of the shell parts.
dwState = (SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON);
SHFullScreen(GetSafeHwnd(), dwState);
#ifdef POCKETPC2003_UI_MODEL
if(hmenu != NULL)
{
::ShowWindow(hmenu, SW_SHOW);
}
#endif
// Then resize the main window to be the size of the work area.
SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, FALSE);
#ifdef POCKETPC2003_UI_MODEL
//GetWindowRect(hwnd, &rcMenuBar);
#endif
MoveWindow(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top-26, TRUE);
}
2、symbian平台的mmp文件的include部分要添加 /epoc32/include/stdapis
3、symbian平台的mmp文件添加CAPABILITY NetworkServices
4、symbian平台自签名:
/Symbian/9.2/S60_3rd_FP1/Epoc32/tools>makekeys -cert -password 密码 -len 2048 -dname "CN=Test User OU=Development OR=Company CO=FI EM=test@company.com" mykey.key mycert.cer
/Symbian/9.2/S60_3rd_FP1/Epoc32/tools>signsis name.sis name.sisx mycert.cer mykey.key 密码
- 【Stones from other hills】windows mobile和symbian平台下rtsp流媒体播放器
- 3G应用---windows mobile和symbian平台下rtsp流媒体播放器
- windows mobile和symbian平台下rtsp流媒体播放器实现方法
- Windows mobile和 symbian平台下rtsp流媒体播放器开发
- Windows mobile和 symbian平台下rtsp流媒体播放器开发
- 3G应用-windows mobile和symbian平台下rtsp流媒体播放
- 【Stones from other hills】基于rtsp的手机视频点播实现和研究
- 【Stones from other hills】硝烟中的Scrum和XP
- 【Stones from other hills】跨公网监控
- 【Stones from other hills】水煮TCPMP
- 【Stones from other hills】视频解码优化
- 【Stones from other hills】RTP各种协议
- 【Stones from other hills】 编程习惯
- 【Stones from other hills】如何成为项目经理
- 【Stones from other hills】在Livemedia的基础上开发自己的流媒体客户端
- 【Stones from other hills】手机视频监控系统需求
- 【Stones from other hills】视频监控的一些文章
- 【Stones from other hills】H3C 视讯会议解决方案
- Non-model Dialog
- priority_queue用法小结 收藏
- 程序员必须知道的英语!!
- 动态规划——找零钱问题 收藏
- 贪心算法——Huffman编码(哈夫曼编码) 收藏
- 【Stones from other hills】windows mobile和symbian平台下rtsp流媒体播放器
- 常量和变量、运算符、表达式和语句
- Linux 内核的排队自旋锁(FIFO Ticket Spinlock)
- 【Stones from other hills】基于rtsp的手机视频点播实现和研究
- uclinux 下各个文件夹的作用
- 动态规划——贪心算法——活动选择问题 收藏
- 自旋锁
- 动态规划——最大子矩阵和 收藏
- 使用名字空间成员