- 博客(62)
- 资源 (8)
- 收藏
- 关注
原创 webrtc初级教程-仝利-专题视频课程
从基础的怎么从网上下载webrtc教程开始,由浅入深讲解webrtc的整个框架。拿webrtc的经典例子peerconnection_client来讲解。从代码细节深入进去
2016-02-25 15:20:08
902
1
原创 ffmpeg+ffserver多媒体服务器开发入门
公司需要为Html5客户端配置多媒体服务器。主要是作为媒体server,,音频是实时来自聊天室,中间需要经过一次转码,Opus->mp3,实时转码。研究了两周,将其中一些心得记录分享下。1.循环播放mp3文件。ffserver提供对外的服务请求的处理,ffmpeg作为转码的工具,即将文件或者流中的数据流转发或者转码到ffserver的磁盘文件/tmp/feed1.ffm中。ffm是ffmpeg中保
2015-11-13 20:17:06
4559
1
原创 WebRtc研究二(WebRtcDemo的使用)
WebRtcDemo的运行效果:1:如果要拨打另一台终端的话再SETTING里面配置好对方的IP地址。然后回到MAIN点击StartCall2: 对面也要设置我的IP,然后也要去MAIN里面点击StartCall这个应该是通过点对点进行连接的。同时支持音频和视频。支持本地显示。该工程的源码的位置是:webrtc/src/webrtc/examples/android/media_demo
2015-10-15 15:56:40
4710
原创 webrtc研究一(源码下载和编译)
写在最前面一:写博客的目的1.自己研究的辛苦自己清楚。2.网上的各种资料鱼龙混杂,很多都过时了。3.基于最新的webrtc源码分享自己工作中的一些心得体会。4.如果写的好大家就鼓掌,写的不好勿喷。有钱的捧个钱场,没钱的...二:编译编译还是编译1.自己最好还是准备个vpn,不要想着有谁把代码拷贝下来上传到国内的服务器上。2.下载depot_tools,并且加入到PATH中: git clone h
2015-10-15 14:08:53
3693
1
原创 FEC原理及其实现
视频会议中通常使用的FEC/QOS技术,这方面的资料比较复杂和稀少,根据这么多年的工作经验,做一下分享。一:差错控制技术 1. ARQ :是一种按需重传的机制,发送者通过接受者的反馈得知有报文在传输过程中有丢失,就重传该报文。 缺点:通信信道的利用率不高,也就是说信道还远远没有被数据流占满,需要接收方发送ACK,这样影响传输效率。可以想象,这种方式发送方肯定需要一个buffer来存储获取到的数
2015-10-13 13:55:49
25897
1
原创 JAVA工具-实现java的String类转换为C中的char*数组
JNI开发中,java与c代码交互的时候通常有String和char*的转换,但是请注意,这两者不是一类。 找了个工具方法,作为备忘。char* Jstring2CStr(JNIEnv* env, jstring jstr){ char* rtn = NULL; jclass clsstring = (*env)->FindClass
2015-03-20 14:19:20
2153
原创 安卓横竖屏切换问题总结
如果不想让软件在横竖屏之间切换:可以通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。比如下列设置android:screenOrientation="portrait"则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。android:screenOrientation="landscape",为横
2015-03-19 13:00:27
2209
原创 安卓服务(Service)的两种开启方式以及服务的生命周期
安卓中服务的开启方式一:采用start的方式开启服务调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy() 特点:服务被开启后不会重复开启,只会调用onStart(),服务只会被停止一次。 二:采用bind的方式开发服务 调用函数:bindService(Intent…)->onCreate(
2015-03-19 11:58:12
4331
原创 安卓短信过滤器小程序
对于安卓的短信广播接受者支持,谷歌应该在安卓4.2以后就开始弱化了,也就是配置起来较麻烦唯一,但是到了5.0的时候就应该完全不支持了。因为谷歌认为这种技术对用户个人隐私造成很大影响,事实上也正是如此,黑客可以很容易的获取到用户的短信。 下面写一个短信过滤的小demo。/**创建一个短信接收器,继承广播接受者*/public class SmsReceiver extends Broadcas
2015-03-18 15:33:54
2000
原创 安卓系统下的多线程断点下载实现2利用开源框架XUtils
使用开源框架可以大大降低开发的难度,减少开发的周期,并且bug也少的多,软件运行起来更稳定。xUtils简介xUtils 包含了很多实用的android工具。 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响… xUitls 最低兼容android 2.2 (api level 8)下载地址:https://gith
2015-03-17 13:02:35
1660
原创 安卓系统下的多线程断点下载实现
最近研究多线程下载,写了个demo,整理下来,也许会对别人有帮助。 多线程下载的话一般开启两到三个线程吧。如果线程太多的话时间会浪费在线程的切换上,倒是浪费了大把的时间。线程多了也不是一件好事。 原理的话看我的另一篇博文,事实上是将代码移植到了安卓系统上。java实现的多线程下载demopublic class MainActivity extends Activity { protec
2015-03-17 12:12:30
1293
2
原创 Java之多线程断点下载的实现
RandomAccessFile类: 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组,光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当
2015-03-16 17:22:39
1591
1
转载 Live555-基类研究二
TaskSecheduler类是一个任务调度器,它是整个Live555的任务调度中心,程序在任何时刻的任何动作,均由该类完成。其核心函数是SingleStep。Live555的任务主要分为Delayed Event、Socket Event以及Trigger Event。其类层次结构如下图所示: 从类图中可以看到,其类层次结构和第二节中的UsageEnvironment类极其相
2015-02-09 17:12:01
2167
原创 WinSocket的select函数的用法(windows套接字比较研究)
总体上来说select函数的作用:确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。简单来说select用来填充一组可用的socket句柄,当满足下列之
2015-02-07 17:08:44
9969
原创 H264包解析
在H.264/AVC标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。VCL负责表示视频数据的内容,NAL则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。NAL单元是NAL的基本语法结构,它包含一个字节的头信息和一系列来自VCL的称为原始字节序列载
2015-02-06 13:21:03
6308
原创 FFMPEG实现H264的解码(从源代码角度)
农历2014年底了,将前段时间工作中研究的FFMPEG解码H264流程在此做一下整理,也算作年终技术总结了!H264解码原理:H264分为NAL(网络抽象层)和VCL(视频编码层)解码器的总框架:解码器的流程为:将NAL数据位流输入到H264的解码器中,熵解码模块解码后输出量化系数X;系数经过反量化和反变换得到残差数据R;解码器使用从码流中解码的头信息生成预测块Pr
2015-02-06 10:16:26
8288
原创 MpegTS流解复用程序实现(解复用得到PES和ES)
MpegTS基础看这几篇博文:MpegTS基础MpegTS之TS,PES,ES结构分析TS流复用和解复用是一个相逆的过程。TS解复用得到的是音视频的PES裸流。一般来讲,每个TS包的长度是188个字节,也有一种204个字节的,就是在每个包后面加上16个字节的RS冗余校验信息。在这里分析188个字节的情况,其余的都类似了。从文件中循环读取188个字节的包,然后对包进行
2015-02-05 15:07:01
6710
原创 FFMPEG实现的转码程序
本例子是由FFEMPG的doc/example例子transcode.c修改而来,可以根据需求任意转换音视频的编码。原来的例子的作用更类似于remux,并没有实现转码的功能,只是实现了格式转换,比如ts转avi等。并不能实现音视频编码格式的转换,比如将h264转为mpeg2。FFMPEG转码的实现有多种方式:一种方式是:流解复用->视频+音频流->解码->YUV/PCM
2015-02-04 17:06:34
7527
8
原创 FFMPEG用法整理
1.修改分辨率率将输入为640*480的修改为320*249ffmpeg -i input -vf scale=iw/2:-2 outputiw:输入帧宽,此处为640,640/2=320。-1告诉scale filter保持纵横比,所以scale filter计算出值240.2.改变音视频播放速度1>视频2倍播放速度,音频两倍播放速度。ffmpeg -i in
2015-02-04 14:31:20
26258
2
原创 【整理】FFMPEG相关开源项目
1.FFmpeg build for android random architectures with example jnihttps://github.com/appunite/AndroidFFmpeg2.ijkplayer - Android/iOS 基于FFMPEG库的播放器http://git.oschina.net/bbcallen/ijkplayergit下载
2015-02-02 19:11:07
8561
转载 安卓开源项目整理
一、代码库1、from 代码家整理比较好的源码连接****************************************************************************************************************************************************
2015-02-01 23:47:56
5515
原创 FFMPEG-AVFilter研究
FFMPEG中的libswscale是做像素转换的,但是对于一些复杂的操作,比如添加水印等,这个库就不行了,这时候就要说一下另外一个AVFilter。AVFilter完全可以替代libswscale的所有功能,也许有一天,ffmpeg也会这样去做。AVFilter虽然学起来有点复杂,但是为了学好FFMPEG,为了涨工资,我忍了。(*^__^*) 嘻嘻……概念:做个directsho
2015-01-30 11:57:35
6732
原创 Ffmpeg转码研究一
Ffmpeg是一款功能强大的视频处理工具,那么转码肯定不是问题的,因为项目的需求,对转码进行了研究。刚开始首先去看了ffmpeg源代码中的一个例子transcode.c,但是发现该例子更应该称之为remux的一个例子,并没有具体的涉及到转码。所以转而去ffmpeg工具中寻求帮助了。ffmpeg转码流程:举例:输入文件为ts格式,视频编码为H.264,音频编码为AAC,要
2015-01-29 16:14:30
3053
原创 MPEG-TS基础2
MPEG-2传送流系统层为了实现解码同步,在PES中插入PTS和DTS以及相关的系列标志符。由图可以看出,TS由4B的包头,可变长度的调整头和负载构成。包头由同步字节,1B传送数据包差错指示,1B净荷单元起始指示,1B传送优先权,13B的包标识符PID,2B传送加扰控制,2B调整字段控制和4B连续计数器组成。其中的净荷起始指示表示打包的原始流PES数据包字头或包含与节目有关的P
2015-01-21 17:14:47
8623
原创 Ffmpeg源代码解析之av_read_frame
av_read_frame从字面意思上来看,就是从内存中读取一帧,但是具体的实现如何?本文是在参考别人的代码的基础上,结合最新的源代码,进行分析研究!如果有不正确的地方,欢迎指正。
2015-01-19 10:45:24
23948
原创 ffmpeg的IO操作
网上类似介绍ffmpeg的文章其实挺多。但是让人看了之后还是一头雾水,并且一些结构已经没有了比如ByteIOContext已经改名为AVIOContext,所以决定根据自己的学习经历重新来介绍下IO。所谓IO就是数据的存取,主要的途径也就是文件或者网络。数据IO是基于文件格式的,与具体的编码标准无关。ffmpeg对各种协议实现了封装,使用同样的接口,完成对不同数据的读取。比较屌
2015-01-16 16:01:31
17902
原创 MPEG2-TS基础
一:基本概念1.ES--Elementary Streams(原始流)是直接从编码器出来的数据流,ES经过PES打包器之后,转换成PES包。ES仅是包含一种数据内容的数据流,如h.264视频或者aac音频数据。打包之后的PES也是只包含一种的ES,如只含视频ES的PES或者只含音频ES的PES。每个ES都由若干个存取单元(AU)组成,每个视频AU或者音频AU都由头部和编码数据两部分组成,一
2015-01-16 09:15:14
21903
原创 ffmpeg转码之TS转PS
写了一个ts转ps的demo。ts数据从文件中读取。ffmpeg怎么从从内存中获取看这篇博文http://blog.youkuaiyun.com/rootusers/article/details/42551935然后将ts流转换为ps流,存储在内存中。下面是代码:extern "C"{#include "libavformat/avformat.h"}FILE *file = NUL
2015-01-13 13:45:09
9598
原创 ffmpeg 如何探测网络流格式/如何从内存中获取数据
一般ffmpeg都是直接从文件中读取或者从网络流中读取,比如rtp://xx.xx.xx.xx:xxxx。事实上也支持从内存中获取。函数avio_alloc_context()实现该功能。AVIOContext *avio_alloc_context( unsigned char *buffer, int buffer
2015-01-09 10:39:43
18143
原创 Live555学习基础类
Live555主要用到的类介绍:1.UsageEnvironment类:抽象基类class UsageEnvironment {public: void reclaim(); // task scheduler: TaskScheduler& taskScheduler() const {return fScheduler;} // result message ha
2015-01-08 09:53:29
24325
原创 Directshow源码分析之推模式
在windowsSDK中有一个推模式的Source Filter例子,位于SDK安装目录samples\C++\Directshow\Ball下。下面做一下简要分析:功能:Live Source不断产生视频帧,演示在封闭围墙内碰撞的弹球的运动轨迹。使用该filter构建Filter Graph及其输出结果如下图:类的继承结构关系为:CBouncingBall继承自C
2015-01-06 15:11:39
4371
转载 Live555源码在vs2010/vs2013中的编译
Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。目前,Live555
2015-01-04 16:40:19
5527
原创 创建一个directshow应用程序二2.
事件交互的是实现directshow有一种机制,实现应用程序和Filter Graph的交互控制,该机制叫做事件通知(Event Notification)。当Filter状态转换,运行时遇到错误或者要求重画视频窗口时,都会发出一个特定的事件,由Filger Graph处理或者转发给应用程序。Filter Graph Manager上有三个接口与事件通知有关:IMedi
2014-12-26 10:31:07
8505
原创 创建一个directshow应用程序一
创建dshow应用程序一般有三个步骤:1.创建一个Filter Graph Manager组件。IGraphBuilder * pGraph = NULL;HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph);,
2014-12-26 09:28:00
5625
原创 directshow原理分析之filter到filter的智能连接
先看几个函数:IFilterGraph::AddFilter:参数为一个Filter对象,将其加入到Filter Graph中IFilterGraph::ConnectDirect:参数为一个输出Pin,一个出入Pin以及媒体类型,进行直接的链接IGraphBuilder::AddSourceFilter:参数为源文件名,自动将一个Source Filter加入到Filter Grap
2014-12-25 17:07:08
22401
原创 directshow原理分析之filter到filter的连接
Filter是Directshow中最基本的概念。Directshow使用filter graph来管理filter。filter graph是filter的容器。Filter一般由一个或者几个Pin组成。filter之间通过Pin来连接,组成一条链。PIN也是一种COM组件,每一个PIN都实现了IPin接口。试图链接的两个Pin必须在一个filter graph中。连接过
2014-12-25 14:18:44
6120
原创 directx学习之在屏幕上画一个三角形
前一张已经输出了一个背景为紫色的屏幕,这一节的目标是在该屏幕上输出一个三角形。下面将逐一介绍建立一个三角形的过程。一个三角形有三个点,叫做顶点。三个点的不同的集合可以建立不同的三角形。能让GPU创建一个三角形,必须将三个顶点的位置告诉它。下面是一个2D的例子。怎么将三个点的数据传给GPU?在d3d10中,顶点数据被存在一个缓存资源中。但是应该申请多大的缓存,这就是接下来
2014-12-18 14:02:09
8733
原创 (Directx11学习)开天辟地第一式
我们首先创建一个窗口,该窗口带有消息处理:最基本的win32中创建窗口程序://--------------------------------------------------------------------------------------//author:tongli//-------------------------------------------------
2014-12-17 19:01:49
5335
原创 java的字符编码集(UNICODE,utf-8,gbk等)
字符串的序列化:从char序列到byte序列的转化,叫做“编码”。1>java的String本质上是char数组。2>Unicode编码。与ISO-8859-1兼容。包含全世界所有的字符。均占2个字节。3>utf-8:采用变长编码1-N方案。英文1个字节,中文3个字节4>utf-16be编码:将16位的char从中间切开为2个byte。可以支持65535个字符编码5>GBK
2014-12-16 13:10:41
8636
TS流解复用程序
2015-02-05
FFMPEG转码程序
2015-02-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人