手机音视频流媒体开发一些有用资料(2010.03.09更新)

本文档汇总了手机音视频流媒体开发的相关资料,涵盖RTSP视频流播放、Symbian流媒体播放、HTTP流媒体音乐播放器开发、AMR解码方法、AAC解码、3gp文件格式研究等内容。通过实例和代码,讲解了如何使用CVideoPlayerUtility、CMdaAudioOutputStream、CMMFCodec等工具进行流媒体播放和解码,并探讨了不同编码格式如AMR、AAC、MP4在手机平台的应用。此外,还介绍了MP4文件格式、HTTP请求配置和连接超时问题的处理。
摘要由CSDN通过智能技术生成

不断更新,欢迎交流和转载。

 

目录:

1.CVideoPlayerUtility播放RTSP视频流

2.关于symbian流媒体播放

3.基于http的流媒体音乐播放器的开发

4. Symbian解码AMR的方法

5. 怎么样用C语言实现amr解码为pcm数据

6. Something about AAC

7. 3gp文件格式研究

8. mplayer音视频同步原理

9.  修改TCPMP界面

10.windows mobile使用libmad解码mp3流媒体

11.mp4文件格式

12. MMFCODEC AAC解码器配置

13. 移动wap网关的一些限制说明

14. MTK平台用Socket实现HTTP请求总结

 

 

1. 通过CVideoPlayerUtility的OpenUrlL()打开了3gp (证实了使用该接口可以实现RTSP流的接收,而官方文档只是介绍能播放"clip”)

 

   相关链接:如何使用CVideoPlayerUtility来播放视频文件

 

  OpenUrlL()播放rtsp资源时候,大致会做下面3件事情
1.根据提供的文件格式,如果url没有文件格式,需要手动指明mime type;初始化plug-in codec;在MvpuoOpenComplete()回调之前完成
2.通过内置的rtsp协议与服务器通信,建立连接,这部分在MvpuoPrepareComplete()之前完成
  在我的例子中,模拟器和dss建立了rtsp连接,模拟器解析了sdp,这样就得到了文件信息
3.发出rtsp的PLAY请求,模拟器开始接受数据,这时候可以通过MvloLoadingStarted()得到开始缓冲的信息
 
最重要的调用就是这个了
iPlayer->OpenUrlL(aUrl, iap, KNullDesC8, KNullUid);
 
在开始写这行代码之前,要确定
1.aUrl在realplayer上能不能打开,协议是否支持,传输的方式(TCP/UDP)和端口是否支持,文件的格式是否支持
2.iap是否设置正确,如果不正确不能建立连接
3.在模拟器上要加上函数需要的能力,因为我打开了能力检查,没再mmp中加入能力,导致回给我KErrCouldNotConnect

 

 

 

 试验当中aUrl等于rtsp://192.168.20.43/sample_50kbit.3gp,这个文件采用MPEG4-ES + AMR编码格式

 

  转自仙人板板BLOG

 

2. 无论使用OpenFileL()、OpenDesL()还是OpenUrlL(),传给CVideoPlayerUtility的都只是视频剪辑,所以说它支持播放剪辑式的内容。而开发人员有办法像使用CMdaAudioOutputStream那样把流式的内容连续地传给CVideoPlayerUtility播放吗?没有。所以说它不支持播放流式的内容。 from chenziteng

 

3.基于http的流媒体音乐播放器的开发

 

     原理是这样:从 HTTP 服务器获得 MP3 媒体信息,然后通过网络传输把 MP3 数据以数据流的形式接收到 MP3 流媒体播放器客户端,由客户端通过 libmad 解码 MP3 数据流,得到 PCM 音频数据,写入音频设备,播放音乐。

 

 

 

   考虑方案是CMdaAudioOutputStream结合Libmad(开源MP3解码库)来实现。有个开源项目S60 Internet Radio很有用,它支持多种音频格式的播放:MP3, AAC, eAAC+, MP4, M4A, WMA, 3GPP, AMR, and WAV。

 

4. Symbian解码AMR的方法

  1、直接使用CMdaAudioOutputStream类
CMdaAudioOutputStream *iOutputStream;

在函数MaoscOpenComplete(TInt aError)中设置解码器为AMR
iOutputStream->SetDataTypeL(KMMFFourCCCodeAMR)

需要包含的头文件
#include <mda/common/audio.h>
#include <MdaAudioOutputStream.h>

需要链接的库
mediaclientaudiostream.lib

然后就可以直接使用iOutputStream->WriteL写入AMR码流。
但这种方法无法实现流式播放,可能是因为每次调用WriteL都会重新初始化解码器,回放出来的声音有问题。

 


2、使用CMMFCodec类解码,然后再使用CMdaAudioOutputStream类回放

CMMFDescriptorBuffer *iPcm16Buffer = CMMFDescriptorBuffer::NewL( OutputSize );

CMMFDescriptorBuffer *iAmrBuffer = CMMFDescriptorBuffer::NewL( InputSize );
CMMFCodec *iOCodec = CMMFCodec::NewL( TUid::Uid(  0x101FAF67 ) );

TDesC8* ConvertAmr2PcmL( const TDesC8& aAmrData )
{

 // amr input data
 iAmrBuffer->Data().Copy( aAmrData );

 // decode
 TCodecProcessResult result = iOCodec->ProcessL( *iAmrBuffer,
*iPcm16Buffer );

 if ( ( result.iStatus == TCodecProcessResult::EProcessComplete ) &&
 ( result.iSrcBytesProcessed == KAmrFrameSize ) &&
 ( result.iDstBytesAdded == KPcmBufferSize ) )
 {
 // return buffer
  return &( iPcm16Buffer->Data() );
 }
 else
  return NULL;
}

需要包含的头文件
#include <mmf/server/mmfcodec.h>

需要链接的库
mmfserverbaseclasses.lib

使用CMdaAudioOutputStream的时候要注意,必须等MaoscBufferCopied被调用以后才能再
次调用WriteL,因为Symbian中没有缓冲队列的。

 

5. 怎么样用C语言实现amr解码为pcm数据

 

3GPP TS 26.073 AMR speech Codec; C-source code
http://www.3gpp.org/FTP/Specs/html-info/26073.htm

3GPP TS 26.104 ANSI-C code for the floating-point Adaptive Multi-Rate (AMR) speech codec
http://www.3gpp.org/FTP/Specs/html-info/26104.htm

 

6. Something about AAC(转自http://blog.csdn.net/Kryptonum)

关于AAC的基本概念都可以在wikipediaAudio Coding找到,就说几个不太好理解的问题。(部分内容来自doom9.net)

1。文件头

AAC有多种存储的方式,分别是ADTS文件头加RAW Data BlockADIFRAW Data BlockLATMRAW Data Block;或者就是将RAW Data直接存储在MP4容器格式里。

ADTS (Audio Data Transport Stream) 适用于用于网络传输; ADIF (Audio Data Interchange Format) 则主要用于本地存储。ADTS文件头存在于每一个RAW Data Block前或者每隔2-4RAW Data Block前,以确保网络传输的健壮性;而ADIF文件头仅存在于文件的起始处。

2.容器格式

容器格式允许你将不同种类的多媒体数据流(多为视频流和音频流)合并在一个单一的文件内。
多媒体容器格式,就是我们熟知的AVI(.avi), MPEG(.mpg, .mpeg), Matroska(.mkv, .mka), OGM(.ogm), Quicktime(.mov),Realmedia(.rm, .rmvb).

MP4
是遵循MPEG-4ISO 14496-14)的官方容器格式定义的广义文件扩展名。它可以流媒体化并支持众多多媒体的内容(多音轨(multiple audio)

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值