ffmpeg+SDl+ 播放器 -01

本文介绍了一个基于LINUX平台的音视频播放器项目,重点在于支持多种格式(如WMA、FLAC、DST和DSD)的播放,并详细描述了使用ffmpeg和SDL进行开发的过程及遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近因公司项目需要,打算自己在LINUX平台整一个播放器,来学习和研究音频编解码。


项目需求:

支持下列格式文件播放。

1> WMA

硬件解码,但需要软件分析ASF格式,提取Payload数据


2> FLAC

软件解码


3> DST、DSD

硬件解码,但需要软件分析文件格式,提取Packet数据


网上搜了一圈,对于1) 2)最适合的是ffmpeg

对于3) 目前网上只找到foobar的插件版本。


最终,LINUX下的播放器打算采用 ffmepg + SDL

整体框架设计如下:

interface (封装SDL,自己写一个简单的HMI)

|

MediaEngine

| | |

Input Decoder Output


其中input 参考 vlc的设计,支持本地文件系统,USB,网络(DLNA或Web Uri)

Decoder 支持 JPG、PNG,WAV,FLAC,WMA,DST,MP3


简单分析好了基本需求和整体框架后,接下来就是下载代码开工。

STEP1:

http://ffmpeg.gusari.org/static/32bit/ 目前选择ffmpeg-0.9.2.tar

http://www.libsdl.org/ 目前选择SDL-1.2.15.tar

./configure;make;make install


STEP2:

编写Makefile

LIBS+= -lpthread -lavformat -lavcodec -lavutil -lswscale -lm -lSDL -lrt (注意先后顺序不能随便更改,这地方被坑了好一会儿)

INCLUDE+= -I/usr/local/include/libavcodec -I/usr/local/include/libavformat -I/usr/local/include/libavfilter -I/usr/local/include/libavformat -I/usr/local/include/libswscale -I/usr/local/include/SDL


STEP3:

学习ffmpeg+Sdl

http://dranger.com/ffmpeg/ 注意由于版本差异,无法编译通过,修改函数很麻烦,只需要了解其设计思路就可以了。


STEP4:

参考ffplay.c 写解码库。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值