【问题标题】:Android Streaming with MediaPlayer: Error(1, -1004) and 3GPP video使用 MediaPlayer 进行 Android 流式传输:错误(1,-1004)和 3GPP 视频
【发布时间】:2012-05-11 01:27:24
【问题描述】:

我正在尝试制作一个播放视频的应用程序。我有两个问题:

1) 我有一个 Youtube 的链接:rtsp:// 我愿意:

"Uri myUri = Uri.parse(link); //link = rtsp://... mMediaPlayer.setDataSource(getApplicationContext(), myUri);"

然后,视频无法播放...但是,如果我使用“videoview”可以工作。我认为问题在于“媒体播放器”不播放 mpeg 编解码器。有什么想法吗?

2) 我有几个不同质量的链接,我将它们连接到 wifi 并没有问题,但有数据连接:

05-01 15:58:25.453: E/Link:(31565): http%3A%2F%2Fo-o.preferred.mad01s04.v16.lscache3.c.youtube.com%2Fvideoplayback%3Fupn%3D35Zn4tL7Ibc% 26sparams%3Dcp%252Cid%252Cip%252Cipbits%252Citag%252Cratebypass%252Csource%252Cupn%252Cexpire%26fexp%3D900147%26itag%3D18%26ip%3D85.0.0.0%26signature%3DAACE528D596873408192BCDDF4ECFC7DDFD68EBB.575689C34D97BA9D750C7B40CC63B427E40E7838%26sver%3D3%26ratebypass%3Dyes% 26source%3Dyoutube%26expire%3D1335903378%26key%3Dyt1%26ipbits%3D8%26cp%3DU0hSSllLUV9MUkNOMl9RRVVEOnduVjJoRkFBMDBn%26id%3D8fb5ca7aa1a31f5e

05-01 15:58:25.464: I/AwesomePlayer(31648): setDataSource_l('http://oo.preferred.mad01s04.v16.lscache3.c.youtube.com/videoplayback?upn=35Zn4tL7Ibc&sparams=cp% 2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&FEXP = 900147&ITAG = 18&IP = 85.0.0.0&签名= AACE528D596873408192BCDDF4ECFC7DDFD68EBB.575689C34D97BA9D750C7B40CC63B427E40E7838&sver = 3&ratebypass = YES&源= YouTube和到期= 1335903378&键= YT1&ipbits = 8&CP = U0hSSllLUV9MUkNOMl9RRVVEOnduVjJoRkFBMDBn&ID = 8fb5ca7aa1a31f5e')

05-01 15:58:25.484: V/ChromiumHTTPDataSource(31648): 代表 uid 10101 连接

05-01 15:58:25.484: I/ChromiumHTTPDataSource(31648): 连接到http://o-o.preferred.mad01s04.v16.lscache3.c.youtube.com/videoplayback?upn=35Zn4tL7Ibc&sparams=cp%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&fexp=900147&itag=18&ip=85.0.0.0&signature=AACE528D596873408192BCDDF4ECFC7DDFD68EBB.575689C34D97BA9D750C7B40CC63B427E40E7838&sver=3&ratebypass=yes&source=youtube&expire=1335903378&key=yt1&ipbits=8&cp=U0hSSllLUV9MUkNOMl9RRVVEOnduVjJoRkFBMDBn&id=8fb5ca7aa1a31f5e@0

05-01 15:58:26.226:I/ChromiumHTTPDataSourceSupport(31648):服务器响应 http 状态 403

05-01 15:58:26.226:I/AwesomePlayer(31648):mConnectingDataSource->connect() 返回 -1004

05-01 15:58:26.226: E/MediaPlayer(31565): 错误 (1, -1004)

05-01 15:58:26.242: E/MediaPlayer(31565): 错误 (1,-1004)

05-01 15:58:26.242:E/RS(31565):MediaPlayer 播放错误

05-01 15:58:26.242:V/(31565):媒体错误,错误未知 -1004

05-01 15:58:26.242:I/RS(31565):MediaPlayer 播放完成

希望你能帮上忙。 谢谢!

【问题讨论】:

  • 我在通过 mediaPlayer 播放 rtsp 视频链接时遇到了同样的问题。你找到解决办法了吗?

标签: android youtube media-player android-videoview


【解决方案1】:

1) 尝试不使用静态构造函数 2) 使用标准构造函数创建一个 mp 对象,尝试使用 setDataSource()、prepareAsync() 等。 3)捕捉null和非法状态异常。

MediaPlayer api 存在一些错误和限制。

请忽略我的示例代码中的 isCanceleld()。

示例代码:

if (mp == null && isCancelled() != true) {
                    mp = new MediaPlayer();
                    mp.setDataSource(chnlUrlParam);
                    mp.prepareAsync();
                    mp.start();

// Log.d("doInBackground", "mp.getCurrentPosition() after mp.start() "+ mp.getCurrentPosition()); // Log.d("doInBackground","mp.getDuration() after mp.start() " + mp.getDuration()); mp.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

                        @Override
                        public void onBufferingUpdate(MediaPlayer mp,
                                int percent) {
                            Log.d("TAG_Async", "percent: " + percent);
                        }
                    });

                }

                if (mp == null) {
                    Log.d(TAG_Async,"### Failed to create media player from static constructor ###");
                }

【讨论】:

    【解决方案2】:

    实际上有一个错误是流式URL错误,因此存在此问题..否则它在videoview中运行良好。

    你必须在 url 之后添加 youtube 签名。

    我已经解决了这个问题,而且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2016-06-17
      • 2011-05-11
      • 2016-05-25
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多