<项目日志 1004> 轻量便携流媒体播放器框架设计-2

原创 2012年03月21日 15:36:13
前面讨论最基础的设计思路,下面说明详细的设计实现。
  • Access 模块
     Access模块完成数据获得,设计两个接口:Open()/Close(),提供三个回调函数即onStreamBegin(bool), onStreamEnd(), onStreamData(void *,int);  看意思就清楚了,无需多余的说明,代码如下:
class Access {
public:    
    virtual ~TeaAccess(){};
    //interfaces
    virtual bool Open() = 0;
    virtual void Close() = 0;
    //callbacks
    sigslot::signal1<bool> signalBeginOfStream;
    sigslot::signal0<> signalEndOfStream;
    sigslot::signal2<const unsigned char*, size_t> signalData;
};
    Access为独立线程,因此signalData回调需要进行数据复制之后进行线程切换。

  • Demux 模块
 Demux模块完成数据解析,提供的接口以及回调如下:
class Demux{
public:        
    virtual ~TeaDemux(){};
    //interfaces    
    virtual bool Open() = 0;
    virtual void Close() = 0;
    virtual bool PushNewData(const unsigned char *data, size_t length) = 0;                                    //callbacks
    sigslot::signal1<bool> signalProbed;
    sigslot::signal1<MediaPacket *> signalMediaPacket;
    
    std::map<unsigned int, Decoder *> decoders;
};

主要Open/Close如文字定义,负责Demuxer资源初始化和释放,其中PushNewData完成数据接收(即接收Access的数据)。
回调主要有两个,signalProbed(bool)回调主要完成是否正确解析多媒体文件,signalMediaPacket即解析出来的媒体包。
Demux为一独立线程,根据Access的数据不断产生MediaPacket数据,送给Decode模块解码。
此外,Demux在正确解析多媒体文件之后,维护Decoder对象,Decoder对象将MediaPacket解码为YUV和PCM数据。

  • DecodeTask 模块
该模块是整个播放器的核心之一,设计如下:
class DecodeTask {
public:        
    DecodeTask(Demux *dm);
    virtual ~DecodeTask(){};
    //interfaces    
    void PushMediaPacket(MediaPacket *pkt);                                                                
    void DecodeVideo(MediaTime target);
    void DecodeAudio(MediaTime target);
    MediaTime BufferedVideoLength();
    unsigned int BufferedPictures();
    MediaTime FirstPictureTime();
    MediaTime LastPictureTime();
    MediaTime BufferedAudioLength();
    MediaTime FirstAudioTime();
    MediaTime LastAudioTime();
    //callbacks
    sigslot::signal1<VideoPicture *> signalVideoPicture;
    sigslot::signal1<AudioPCM *> signalVideoPCM;
};

DecodeTask 模块独立线程,但是通过DecodeVideo/DecodeAudio驱动,生成的结果通过两个回调函数返回,并且提供内部音视频数据缓冲状况。Player对象通过定期查询DecodeTask的缓冲状况,驱动解码起进行解码,并将解码结果送交AudioOut模块以及VideoOut模块。






















<项目日志 1003> 轻量便携流媒体播放器框架设计-1

前言:     所谓轻量,即代码小而少;所谓便携,即依赖第三方库少。  说明:         在我从事的开放项目中,常常需要在桌面、手机环境里运行播放器,播放的大都是流式媒体(即无法进行SEE...
  • tteaonly
  • tteaonly
  • 2012年03月09日 10:17
  • 1299

android 流媒体 播放器 项目 源码

项目正在进展中。 我现在已经有一些资料。有兴趣的同志加入我们。留下脚步。  此文章会不断更新。   参考资料: 流媒体: http://blog.csdn.net/jingwen369...
  • jingwen3699
  • jingwen3699
  • 2012年07月06日 01:10
  • 15060

Android流媒体播放器介绍

Android原生流媒体播放Android原生SDK当中有提供流媒体播放API,ViewoView,播放流媒体也挺简单的,但是它支持的流媒体协议有限,例如先前博客里面提到的RTMP,就是不支持的,关于...
  • HACK__ZSMJ
  • HACK__ZSMJ
  • 2016年02月23日 22:08
  • 5057

EasyPlayer开源流媒体移动端播放器推出RTSP-RTMP-HTTP-HLS全功能Pro版

EasyPlayerPro介绍Android EasyPlayerPro专业版全功能播放器,是由EasyDarwin开源团队维护的一款支持RTSP、RTMP、HTTP、HLS多种流媒体协议的播放器版本...
  • xiejiashu
  • xiejiashu
  • 2017年01月12日 14:04
  • 8322

RTSP/RTMP/HLS/HTTP流媒体播放器EasyPlayer

配套开源流媒体服务器EasyDarwin,我们开发了一款开源的流媒体播放器EasyPlayer;同样,EasyPlayer目前只支持RTSP流媒体协议,后面将会随着EasyDarwin项目的迭代扩展其...
  • xiejiashu
  • xiejiashu
  • 2015年02月28日 23:51
  • 9285

TS+M3U8+directshow流媒体播放器 简介

工作两个多月一直围绕着网络播放。现在基本解决了主要问题,小结一下。其中可能有很多的问题,希望各位客官见谅。       我使用的上海一家公司的流媒体服务器。所以我涉及到的开发内容,M3U8解析工作和...
  • Matthew_Fan
  • Matthew_Fan
  • 2012年07月11日 20:16
  • 9062

Android使用MediaPlayer播放流媒体,支持远程以及本地流媒体,一行代码实现

HDMediaPlayer 该类包依托于谷歌Mediaplayer二次封装。 谷歌中国API链接:https://developer.android.google.cn/guide/top...
  • yinhaide
  • yinhaide
  • 2017年05月09日 17:40
  • 4815

iPhone上实现流媒体播放器

首先,获取到视频的截图 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexP...
  • newjerryj
  • newjerryj
  • 2012年06月06日 15:42
  • 15219

EasyPlayerPro安卓流媒体播放器实现Android H.265硬解码流程

本文转自EasyDarwin团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/74502627H.265编码算法作为新一代视频编码标准,...
  • xiejiashu
  • xiejiashu
  • 2017年07月06日 08:58
  • 983

EasyPlayer Android安卓流媒体播放器实现播放同步录像功能实现(附源码)

本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551,John是EasyPusher安卓直播推流、EasyPlayer直播流媒体播放端的开发和维护者...
  • xiejiashu
  • xiejiashu
  • 2017年03月03日 23:11
  • 1811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:<项目日志 1004> 轻量便携流媒体播放器框架设计-2
举报原因:
原因补充:

(最多只允许输入30个字)