您的当前位置:首页正文

历经万难,终于搞定Android下的使用FFMPEG成功对H.264视频流解码

2024-11-23 来源:个人技术集锦

在经过差不多一个礼拜的时间,终于完成了RTSP+H.264解码,真的是十分的高兴,期间感冒,身体不好,还和XX闹矛盾,因此做出来也有点出乎意料,心情格外的好。终于能毕业了。

因此分享一下我的经验,希望对大家有所帮助。


工作流程:1 RTSP客户端搭建 

 2 使用VLC流测试RTSP 

  3 RTP接收线程的框架 

   4 主线程用于绘图的框架

 5 FFMPEG的移植

 6 FFMPEG的包裹文件与调用类

 7 整合NAL Unit,传递给解码类


详细介绍:

关于1,主要就是使用JRTSPLIB,开源项目,我之前写过关于移植的一些改动。

关于2,VLC流输出可以使用流输出字符串简化操作:

sout=#transcode{venc=x264{profile=baseline},vcodec=h264,vb=300,fps=15,scale=1.25,width=176,height=144,acodec=none}:rtp{sdp=rtsp://:8086/} :sout-keep

关于3,可以参照sipdroid的rtp封装

关于4,surfaceview、bitmap、canvas

关于5,参照我之前的几篇文章

关于6,给出我参考的几个对我帮助非常大的帖子:

手研网:  


某国外论坛(原链接失效,补上自己的笔记):http://www.evernote.com/shard/s41/sh/08ba8a04-86bc-48ff-873f-ca9bcd100683/e542fe558661f87987e40d8ccf70d149


手研网的这篇介绍了编译与移植FFMPEG,并且给出了简单的wrapper,可以先按照那个练习一下,但是不推荐使用他的编译与移植方法,没有动态链接来得好


博客园的那篇给出了jni源文件,是一个非常好的学习材料,提取了解码需要的ffmpeg源文件,但是对于流解码,我没有成功。


后来我决定自己写包裹文件,第三个链接,给与我很大的帮助,基本我就是按照那个写的。

关于7,相当重要,我是将SPS,PPS,I帧一起给avcodec_decode_video2的,对于FU-A分片,需要提取UnitType,将每个分包都组成一个完整的Slice,再解码,这是我之前失败的重要原因!


如果有问题,欢迎大家留言,相信大家做出来之后也会和我有一样的成就感



关于FFMPEG移植的代码以及包裹类代码,已经在google code开源:



显示全文