- 浏览: 231709 次
- 性别:
- 来自: 南京
最新评论
-
baby8117628:
vc下mp3 IDv1和IDV2的读取 -
gezexu:
你好,我按照你的步骤一步步进行但是安装libvorbis的时候 ...
linux如何搭建强大的FFMPEG环境 -
ini_always:
帅哥,转载也把格式做好点,另外出处也要注明一下吧。。。
MP3文件格式解析
述
liveMedia项目(http://www.live555.com/)的源代码包括四个基本的库,各种测试代码以及Media Server。四个基本的库分别是: UsageEnvironment&TaskScheduler, groupsock, liveMedia和BasicUsageEnvironment。
UsageEnvironment和TaskScheduler类用于事件的调度,实现异步读取事件的句柄的设置以及错误信息的输出。另外,还有一个HashTable类定义了一个通用的hash表,其它代码要用到这个表。这些都是抽象类,在应用程序中基于这些类来实现自己的子类。
groupsock类是对网络接口的封装,用于收发数据包。正如名字本身,groupsock主要是面向多播数据的收发的,它也同时支持单播数据的收发。
liveMedia库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。
各种测试代码在testProgram目录下,比如openRTSP等,这些代码有助于理解liveMedia的应用。
Media Server是一个纯粹的RTSP服务器。支持多种格式的媒体文件:
* TS流文件,扩展名ts。
* PS流文件,扩展名mpg。
* MPEG-4视频基本流文件,扩展名m4e。
* MP3文件,扩展名mp3。
* WAV文件(PCM),扩展名wav。
* AMR音频文件,扩展名.amr。
* AAC文件,ADTS格式,扩展名aac。
用live555开发应用程序
基于liveMedia的程序,需要通过继承UsageEnvironment抽象类和TaskScheduler抽象类,定义相应的类来处理事件调度,数据读写以及错误处理。live项目的源代码里有这些类的一个基本实现,这就是“BasicUsageEnvironment”库。BasicUsageEnvironment主要是针对简单的控制台应用程序,利用select实现事件获取和处理。这个库利用Unix或者Windows的控制台作为输入输出,处于应用程序原形或者调试的目的,可以用这个库用户可以开发传统的运行与控制台的应用。
通过使用自定义的“UsageEnvironment”和“TaskScheduler”抽象类的子类,这些应用程序就可以在特定的环境中运行,不需要做过多的修改。需要指出的是在图形环境(GUI toolkit)下,抽象类 TaskScheduler 的子类在实现 doEventLoop()的时候应该与图形环境自己的事件处理框架集成。
基本概念
先来熟悉在liveMedia库中Source,Sink以及Filter等概念。Sink就是消费数据的对象,比如把接收到的数据存储到文件,这个文件就是一个Sink。Source就是生产数据的对象,比如通过RTP读取数据。数据流经过多个'source'和'sink's,下面是一个示例:
'source1' -> 'source2' (a filter) -> 'source3' (a filter) -> 'sink'
从其它Source接收数据的source也叫做"filters"。Module是一个sink或者一个filter。数据接收的终点是Sink类,MediaSink是所有Sink类的基类。Sink类实现对数据的处理是通过实现纯虚函数continuePlaying(),通常情况下continuePlaying调用fSource->getNextFrame来为Source设置数据缓冲区,处理数据的回调函数等,fSource是MediaSink的类型为FramedSource*的类成员。
基本控制流程
基于liveMedia的应用程序的控制流程如下:
应用程序是事件驱动的,使用如下方式的循环
while (1) {
通过查找读网络句柄的列表和延迟队列(delay queue)来发现需要完成的任务
完成这个任务
}
对于每个sink,在进入这个循环之前,应用程序通常调用下面的方法来启动需要做的生成任务: someSinkObject->startPlaying()。任何时候,一个Module需要获取数据都通过调用刚好在它之前的那个Module的FramedSource::getNextFrame()方法。这是通过纯虚函数FramedSource::doGetNextFrame() 实现的,每一个Source module都有相应的实现。
Each 'source' module's implementation of "doGetNextFrame()" works by arranging for an 'after getting' function to be called (from an event handler) when new data becomes available for the caller.
Note that the flow of data from 'sources' to 'sinks' happens within each application, and doesn't necessarily correspond to the sending or receiving of network packets. For example, a server application (such as "testMP3Streamer") that sends RTP packets will do so using one or more "RTPSink" modules. These "RTPSink" modules receive data from other, "*Source" modules (e.g., to read data from a file), and, as a side effect, transmit RTP packets.
liveMedia项目(http://www.live555.com/)的源代码包括四个基本的库,各种测试代码以及Media Server。四个基本的库分别是: UsageEnvironment&TaskScheduler, groupsock, liveMedia和BasicUsageEnvironment。
UsageEnvironment和TaskScheduler类用于事件的调度,实现异步读取事件的句柄的设置以及错误信息的输出。另外,还有一个HashTable类定义了一个通用的hash表,其它代码要用到这个表。这些都是抽象类,在应用程序中基于这些类来实现自己的子类。
groupsock类是对网络接口的封装,用于收发数据包。正如名字本身,groupsock主要是面向多播数据的收发的,它也同时支持单播数据的收发。
liveMedia库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。
各种测试代码在testProgram目录下,比如openRTSP等,这些代码有助于理解liveMedia的应用。
Media Server是一个纯粹的RTSP服务器。支持多种格式的媒体文件:
* TS流文件,扩展名ts。
* PS流文件,扩展名mpg。
* MPEG-4视频基本流文件,扩展名m4e。
* MP3文件,扩展名mp3。
* WAV文件(PCM),扩展名wav。
* AMR音频文件,扩展名.amr。
* AAC文件,ADTS格式,扩展名aac。
用live555开发应用程序
基于liveMedia的程序,需要通过继承UsageEnvironment抽象类和TaskScheduler抽象类,定义相应的类来处理事件调度,数据读写以及错误处理。live项目的源代码里有这些类的一个基本实现,这就是“BasicUsageEnvironment”库。BasicUsageEnvironment主要是针对简单的控制台应用程序,利用select实现事件获取和处理。这个库利用Unix或者Windows的控制台作为输入输出,处于应用程序原形或者调试的目的,可以用这个库用户可以开发传统的运行与控制台的应用。
通过使用自定义的“UsageEnvironment”和“TaskScheduler”抽象类的子类,这些应用程序就可以在特定的环境中运行,不需要做过多的修改。需要指出的是在图形环境(GUI toolkit)下,抽象类 TaskScheduler 的子类在实现 doEventLoop()的时候应该与图形环境自己的事件处理框架集成。
基本概念
先来熟悉在liveMedia库中Source,Sink以及Filter等概念。Sink就是消费数据的对象,比如把接收到的数据存储到文件,这个文件就是一个Sink。Source就是生产数据的对象,比如通过RTP读取数据。数据流经过多个'source'和'sink's,下面是一个示例:
'source1' -> 'source2' (a filter) -> 'source3' (a filter) -> 'sink'
从其它Source接收数据的source也叫做"filters"。Module是一个sink或者一个filter。数据接收的终点是Sink类,MediaSink是所有Sink类的基类。Sink类实现对数据的处理是通过实现纯虚函数continuePlaying(),通常情况下continuePlaying调用fSource->getNextFrame来为Source设置数据缓冲区,处理数据的回调函数等,fSource是MediaSink的类型为FramedSource*的类成员。
基本控制流程
基于liveMedia的应用程序的控制流程如下:
应用程序是事件驱动的,使用如下方式的循环
while (1) {
通过查找读网络句柄的列表和延迟队列(delay queue)来发现需要完成的任务
完成这个任务
}
对于每个sink,在进入这个循环之前,应用程序通常调用下面的方法来启动需要做的生成任务: someSinkObject->startPlaying()。任何时候,一个Module需要获取数据都通过调用刚好在它之前的那个Module的FramedSource::getNextFrame()方法。这是通过纯虚函数FramedSource::doGetNextFrame() 实现的,每一个Source module都有相应的实现。
Each 'source' module's implementation of "doGetNextFrame()" works by arranging for an 'after getting' function to be called (from an event handler) when new data becomes available for the caller.
Note that the flow of data from 'sources' to 'sinks' happens within each application, and doesn't necessarily correspond to the sending or receiving of network packets. For example, a server application (such as "testMP3Streamer") that sends RTP packets will do so using one or more "RTPSink" modules. These "RTPSink" modules receive data from other, "*Source" modules (e.g., to read data from a file), and, as a side effect, transmit RTP packets.
发表评论
-
vc下mp3 IDv1和IDV2的读取
2010-01-25 10:52 2383/*这是修改后的代码,VC下读ID3v2 & ID3v ... -
使用ffmpeg为库编写的小型多媒体播放器源代码
2010-01-21 16:52 4335今天突发奇想,就在以前音频播放器(详细情况请看这里——http ... -
ffmpeg提取音频播放器总结
2010-01-21 16:31 5968ffmpeg提取音频播放器总 ... -
ffmpeg开发指南
2010-01-20 17:26 3373ffmpeg 中的Libavformat 和 li ... -
linux下安装ffmpeg过程
2010-01-18 15:48 1884最近互联网视频共享的 ... -
【PNG overview】PNG专题!
2010-01-18 13:39 3349【PNG overview】PNG专题! 作者 鼯鼠 ... -
Big Endian 和 Little Endian
2010-01-18 13:29 1545Peter Lee 2008-04-20 一、字节序 ... -
MediaInfo开源工程
2010-01-18 13:22 2357一、简介 MediaInfo 用来 ... -
MP3文件格式解析
2010-01-18 10:58 3545MP3文件格式解析 Peter Lee 2008-06-0 ... -
LAME-mp3
2010-01-18 10:40 2012LAME - 压缩 MP3 的最佳利 ... -
FLV文件格式分析(图示讲解的清楚)
2010-01-14 15:56 5091FLV是一个二进制文件, ... -
我对FLV 文件格式的理解
2010-01-14 15:52 3346我对FLV 文件格式的理解 ----------------- ... -
常用的音频文件介绍
2010-01-13 10:56 1372MP3全称是动态影像专家压缩标准音频层面3(Moving Pi ... -
RTSP客户端的JAVA实现
2010-01-12 16:12 8238参考资料 1. 《RTSP简单命 ... -
国外嵌入式、音视频处理等重要网站
2010-01-08 10:07 2021嵌入式方面: 1.关于嵌入式开发的站点,提供非常多关于嵌入 ... -
RTSP点播——消息流程实例
2010-01-08 09:44 5097RTSP点播消息流程实例(客户端:VLC, RTSP服务器:L ... -
live555代码解读之三:SETUP和PLAY请求消息处理过程
2010-01-08 09:43 3443SETUP请求消息处理过程 ... -
live555代码解读之二:DESCRIBE请求消息处理过程
2010-01-08 09:42 3781ve555代码解读之二:DESCRIBE请求消息处理过程 ... -
live555代码解读之一:RTSP连接的建立过程
2010-01-08 09:42 4432TSPServer类用于构建一个RTSP服务器,该类同时在其内 ... -
浅议SDP(会话描述协议)
2010-01-04 15:25 3532因为最近常常使用到SDP(会话描述协议Session Desc ...
相关推荐
live555源代码概述与源代码Media Server是一个纯粹的RTSP服务器。支持多种格式的媒体文件: * TS流文件,扩展名ts。 * PS流文件,扩展名mpg。 * MPEG-4视频基本流文件,扩展名m4e。 * MP3文件,扩展名mp3。 ...
Unreal Live Link C 界面 版本 1.5.1 适用于Unreal v4.23或更高版本。 概述 这个小型库为 Unreal Live Link Message ... 构建 Unreal Live Link C 接口插件 DLL 需要 Unreal Engine 源代码。 从下载源代码。 视窗 将
无限跳线模板使用现代 JavaScript 用 Phaser 3 编写的起点概述这是 Phaser 3 中无限跳线起点的源代码,由免费书籍: 。 该项目不使用任何工具,旨在让初学者轻松开始为网络开发游戏。入门Phaser 3 with Modern ...
此存储库包含AWS解决方案的源代码。 架构概述 AWS Elemental MediaLive 配置为摄取2个实时供稿,并将内容转码为多个自适应比特率HLS内容。 该解决方案可以配置为摄取RTP RTMP HLS和MediaConnect流,并将应用3种...
重做备份概述这是从的复制源代码的副本它旨在成为一个分叉和延续。目标自2012年以来, Redo Backup LiveCD尚未更新。 它使用的某些软件存在类似的问题,例如 ,自2011年中以来未更新。此fork打算使用最新的基本OS,...
研讨会的源代码可以在github上找到: git clone git@github.com:anatomic/zero-to-live-fp-js-workshop.git 我们将要探索的事物 扰流板警报 你们中间的老鹰眼已经发现,此仓库中有很多代码在敲,您是正确的,认
Node-RED-Telldus到MQTT桥 概括 该报告中的代码将从检索传感器和设备数据,然后以结构化方式将相同的数据输出到您选择的MQTT主题。...该代码首先建立与Telldus Live API和MQTT代理的连接。 一旦就位,就下载了关于
从模块的源代码自动生成可用于生产环境CSS和JavaScript(具有最小化的版本和源映射) 模板引擎为模块和页面提供更多逻辑 单独的数据层(以使其远离代码) 自动为您的项目生成,其中包括: 项目中使用的颜色列表...
您所要做的就是运行 NPM install 来安装依赖项,然后运行“grunt server”来启动本地环境概述这是我在 2014 年 5 月发表的 AngularJS 聚会的源代码。 这个概念是给出 AngularJS 的中间概述并展示它的一些关键品质。...
master >包含源代码 gh-pages >可部署(构建)的版本 部署文件 。 开发/贡献 在本地克隆仓库 通过mkdocs.yml文件配置您的MkDocs环境,包括导航树目录。 通过Makefile cmd启动MkDocs本地开发Web服务器环境( ...
您可以获得完整的源代码,因此AddChat可以在包括数据库在内的服务器/主机上运行并运行。 因此,您将获得关于数据的完全隐私权。 您是大型企业还是小型企业。 AddChat适合所有人。实时阅读文档实时预览实时预览 这是...
您可以获得完整的源代码,因此AddChat可以在包括数据库在内的服务器/主机上运行并运行。 因此,您将获得关于数据的完全隐私权。 您是大型企业还是小型企业。 AddChat适合所有人。 实时阅读文档 实时预览 这是完整...
Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位...