ffmpeg开发出现的问题(四) ftp/rstp/ts 流输出

          之于使用ffmpeg完成流的输入和流的输出. 之前一直以为困难重重, 做好看协议的打算了.阅读源码方晓新版的ffmepg支持流的输入和流的输出.现在测试通过了. 实现的仅仅是最简单的ftp流输入/转码/ftp流输出. 并且效果和本地的文件一样,速度亦不相上下.实在是值得记录的大事之一.

       网上关于流的输入或者输出,都是怎么实现协议和封装般的长篇累牍. 资料更是寥若星辰, 针对不同的应用, 亦是五花八门. 让初学者望而生畏. 所谓解决方法只是表象, 源码才是王道. 现将调试问题记录之, 以飨来者

1. 流的输入和输出, 路径, 端口, 用户名, 密码, 权限. 这些是开发之前最基本的问题. 针对ftp问题, 之前忘记了写权限, 默认搭建的服务器是只读的, 这个花费了很长时间

2. 用到的函数av_guess_format("ftp", NULL, NULL); 发现这个函数无用, 被包含在avio_open()函数中, 调用这个函数,返回的是空,导致后面操作段错误

3. AVFormatContext *cc=avformat_alloc_context();如果用这个函数来分配容器,对应里面好多数据都是空的.应该用avformat_alloc_output_context(); 看这个函数的源码发现,里面更严谨,更可靠

4.开发步骤:

~ 先本地完成读入文件/转码/写入文件

   这一步在ffmpeg的/doc/example中有好多已经实现,不过每个程序对应的只是里面其中的一个步骤 , 要做的工作是, 根据需求, 把这些功能组合起来

~ 添加读入文件, 改成流的形势, 这个只要搭好环境就行了

~ 写入文件, 这步就得写好各个配置了. 最主要的是avio_open函数, 看下源码, 赋值, 调试到这一步后, 看ftp服务器有没有检测到连接. 否则是你这边出问题了



要在Java中使用FFmpeg输出H264/265的码,可以使用Java ProcessBuilder来启动FFmpeg进程,并将输出重定向到Java程序中。 以下是一个示例代码: ``` import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class FFmpegOutput { public static void main(String[] args) { List<String> command = new ArrayList<String>(); command.add("ffmpeg"); command.add("-i"); command.add("input.mp4"); command.add("-f"); command.add("mpegts"); command.add("-codec:v"); command.add("libx264"); command.add("-codec:a"); command.add("aac"); command.add("-b:v"); command.add("500k"); command.add("-b:a"); command.add("128k"); command.add("-muxdelay"); command.add("0"); command.add("-preset"); command.add("ultrafast"); command.add("-tune"); command.add("zerolatency"); command.add("-f"); command.add("mpegts"); command.add("udp://127.0.0.1:1234"); try { ProcessBuilder builder = new ProcessBuilder(command); builder.redirectErrorStream(true); Process p = builder.start(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } p.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们使用FFmpeg将输入文件input.mp4转换为H264编码的mpegts,并将其输出到UDP地址127.0.0.1:1234。 您可以根据需要更改FFmpeg命令行参数来实现不同的输出格式和编码类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值