android开发实例

4 篇文章 0 订阅
3 篇文章 0 订阅

流媒体

ffmpeg的新东东:AVFilter
摘要: 利用ffmpeg做图像的pixel format转换你还在用libswscale吗?嘿嘿,过时啦!ffmpeg中有了新东西:libavfilter.使用它,可以完全代替libswscale,并且可以自动完成一些复杂的转换操作呢.libavfilter啊,用了都说好!但就是太复杂...如果你仅仅是做图像的pixel format处理,用libswscale是相当简单,可以看看最新的ffplay.c中的代码,被#if CONFIG_AVFILTER #endif包围的代码量非常大,而且让人一上来看得一头雾水,但为了赶潮流,我们还是得学习它啊...先弄清楚avfilter中的几个相关的概念(注意:如 阅读全文

posted @ 2012-01-30 14:20 android开发实例 阅读(264) | 评论 (0) 编辑

live555传输Speex音频详解二:Speex 使用SDP及其它事项
摘要: 1. Speex使用SDP当使用SDP来描述使用Speex格式的会话时,映射是下面这样的:o 媒体类型 ("audio") 在"m="行中指定媒体的名字。o 媒体子类型 ("speex") 在SDP "a=rtpmap"行中指定编码名字。所需的"rate"参数也在"a=rtpmap" 行中,表明时钟频率。o 参数 "ptime" 和 "maxptime" 分别在SDP 的"a=ptime"行和"a=maxp 阅读全文

posted @ 2012-01-18 16:25 android开发实例 阅读(204) | 评论 (0) 编辑

live555传输Speex音频详解一:Speex over RTP
摘要: 1. RTP Speex 头部RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。Payload Type (PT): 本格式的负责类型号。Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在有声数据的第一个包上。 Speex支持声音检测,可以在无声时不产生帧数据。所以包可能是非连续传输的。Extension (X) bit: 见RTP的规定。Timestamp: 一个32位的整数,表示一个包中第一帧的采样时间。2. Speex的RTP负载格式Speex的RTP负载如图1所示。本格式没有附加的头部,所以只什用标准的RTP头部 头部之后是一个或多个负载数据 阅读全文

posted @ 2012-01-18 13:23 android开发实例 阅读(348) | 评论 (0) 编辑

live555学习笔记16-几个重要对象的生命期
摘要: 十六 几个重要对象的生命期live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清.但这并不能说明live555的架构不好,最适合的才是最好的,对于流媒体的处理来说,live555架构已是相当精巧,当然,这是在你深入了解它的基础上才会有的体会.live555作为服务器,大家都很关心对内存的利用效率,是否过多的吃内存?是否造成太多的内存碎片?我个人认为不必太担心这方面的事,live555对于内存的使用效率还是比较高的,当然要求太高的可能要自己实现内存池之类的东西.然而,我在使用它的过程中,还是发现了一点小小 阅读全文

posted @ 2011-12-19 09:13 android开发实例 阅读(162) | 评论 (0) 编辑

live555学习笔记13-RTPInterface详解
摘要: 十三:RTPInterface详解好几天没写blog了。看源码真累啊,还要把理解的写到纸上,还要组织混乱的思想,令人头痛,所以这需要激情。不过,今天激情又来了。大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstance等,它们都没有保存GroupSocket型的变量。那它们通过哪个类进行socket操作呢?是RTPInterface!!这些类接收的GroupSocket指针最后都传给了 RTPInterface 。为什么用RTPInter 阅读全文

posted @ 2011-11-18 13:18 android开发实例 阅读(265) | 评论 (0) 编辑

live555学习笔记12-h264 rtp包的时间戳
摘要: 十二 h264 rtp包的时间戳这次我们一起来分析一下live555中是怎样为rtp包打时间戳的.就以h264为例吧.void H264VideoRTPSink::doSpecialFrameHandling(unsigned /*fragmentationOffset*/, unsigned char* /*frameStart*/, unsigned /*numBytesInFrame*/, struct timeval framePresentationTime, unsigned /*numRemainingBytes*/){ // Set the RTP 'M' . 阅读全文

posted @ 2011-11-08 17:08 android开发实例 阅读(267) | 评论 (0) 编辑

live555学习笔记11-h264 RTP传输详解(3)
摘要: 十一 h264 RTP传输详解(3)书接上回:H264FUAFragmenter又对数据做了什么呢?void H264FUAFragmenter::doGetNextFrame(){ if (fNumValidDataBytes == 1) { // We have no NAL unit data currently in the buffer. Read a new one: fInputSource->getNextFrame(&fInputBuffer[1], fInputBufferSize - 1, afterGettingFrame, this, Frame... 阅读全文

posted @ 2011-11-08 11:24 android开发实例 阅读(252) | 评论 (0) 编辑

live555学习笔记10-h264 RTP传输详解(2)
摘要: 十 h264 RTP传输详解(2)上一章并没有把打开文件分析文件的代码找到,因为发现它隐藏得比较深,而且H264的Source又有多个,形成了连环计。所以此章中就将文件处理与H264的Source们并在一起分析吧。从哪里开始呢?从source开始吧!为什么要从它开始呢?我就想从这里开始,行了吧?FramedSource* H264VideoFileServerMediaSubsession::createNewStreamSource( unsigned /*clientSessionId*/, unsigned& estBitrate){ estBitrate = 500; //. 阅读全文

posted @ 2011-11-04 15:52 android开发实例 阅读(178) | 评论 (0) 编辑

live555学习笔记9-h264 RTP传输详解(1)
摘要: 九 h264 RTP传输详解(1)前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。当RTSPServer收到对某个媒体的DESCRIBE请求时,它会找到对应的ServerMediaSession,调用ServerMediaSession::generateSDPDescription()。generateSDPDescription()中会遍历调用ServerMediaSession中所有的调用ServerMediaSubsession,通过subsession->sdpLines()取得每个Subsession的sdp, 阅读全文

posted @ 2011-11-03 11:21 android开发实例 阅读(344) | 评论 (0) 编辑

live555学习笔记8-RTSPClient分析
摘要: 八 RTSPClient分析有RTSPServer,当然就要有RTSPClient。如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP socket。当获取到server端的DESCRIBE后,应建立一个对应于ServerMediaSession的ClientMediaSession。对应每个Track,ClientMediaSession中应建立ClientMediaSubsession。当建立RTP Session时,应分别为所拥有的Track发送SETUP请求连接,在获取回应后,分别为所有的tra 阅读全文

posted @ 2011-11-02 10:39 android开发实例 阅读(200) | 评论 (0) 编辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Android 开发实例: 1. 创建一个新的 Android 项目 2. 在布局文件中添加一个 Button 和一个 TextView 组件 3. 在 MainActivity 中获取 Button 和 TextView 组件的引用 4. 给 Button 组件添加点击事件监听器 5. 在监听器中获取 TextView 组件的文本内容,并将其显示在日志中 具体实现步骤如下: 1. 在 Android Studio 中创建一个新的项目,设置应用程序名称和包名。 2. 在布局文件 activity_main.xml 中添加以下代码: ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/activity_horizontal_margin" tools:context="com.example.myapplication.MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Me" android:layout_centerHorizontal="true" android:layout_marginTop="50dp"/> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:layout_below="@id/button" android:layout_centerHorizontal="true" android:layout_marginTop="50dp"/> </RelativeLayout> ``` 3. 在 MainActivity 中添加以下代码: ```java public class MainActivity extends AppCompatActivity { private Button mButton; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.button); mTextView = (TextView) findViewById(R.id.textView); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String text = mTextView.getText().toString(); Log.d("MainActivity", "Text: " + text); } }); } } ``` 4. 运行应用程序,在模拟器或设备上点击按钮,查看日志输出。 这个实例演示了如何在 Android 应用程序中创建布局,获取组件引用,以及添加事件监听器来处理用户输入。这只是一个简单的例子,但它可以帮助你了解 Android 开发的基本概念和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值